0

我正在考虑保护模型中的低级对象(“成员”对象),因此默认情况下只能从中访问某些信息。

这是一种可能的方法(如果可行的话,该死的性感!):

1)添加一个名为“locked”的属性 - 默认为“true”到对象本身。

看来,这样做的唯一选择,而不是将其绑定到 db 表列,是使用接受查询的公式属性。所以默认锁定为 TRUE 我有:

<cfproperty name="locked" formula="select 1" />

2) 然后,我覆盖现有的 set-ers 和 get-ers 以使用它:例如

<cffunction name="getFullname" returnType="string"> 
    <cfscript>
        if (this.getLocked()) {
            return this.getScreenName();
        } else {
            return this.getFullname();
        }

    </cfscript>
</cffunction>

3)当我这样使用它时:

<p> #oMember.getFullName()# </p>

显示 ScreenName(太棒了!)

但是......当我这样做时:

<cfset oMember.setLocked(false)>
<p> #oMember.getFullName()# </p>

就挂了!!!似乎尝试设置使用“公式”定义的属性是禁忌。

有任何想法吗?任何其他方式我们可以将属性附加到可获取和可设置的 ORM 对象,而它们不存在于数据库中?

想法赞赏!

4

2 回答 2

1

任何其他方式我们可以将属性附加到可获取和可设置的 ORM 对象,而它们不存在于数据库中?

是的,

<cfproperty name="locked" persistent=false>

http://help.adobe.com/en_US/ColdFusion/9.0/Developing/WSB7BEC0B4-8096-498d-8F9B-77C88878AC6C.html

于 2009-09-10T01:14:49.623 回答
0

是因为在你的函数的 else 语句中,你再次调用了相同的函数名吗?所以它只是反复出现。

尝试重命名函数名称,使其不会覆盖隐式 getter,看看会发生什么。例如

<cffunction name="getNewname" returnType="string"> 
<cfscript>
    if (this.getLocked()) {
        return this.getScreenName();
    } else {
        return this.getFullname();
    }

</cfscript>

于 2011-06-24T09:05:50.647 回答