我正在考虑在我的模型中保护一个低级别对象(一个“成员”对象),所以默认情况下只能从中访问某些信息。
这是一种可行的方法(该死的性感,如果能起作用的话!):
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对象的属性是可获取和可设置的,而不会出现在数据库中吗?
赞赏的想法!
答案 0 :(得分:1)
我们可以拥有任何其他方式的属性 附加到ORM对象 没有它们可以得到和设定 存在于db?
是的,
<cfproperty name="locked" persistent=false>
http://help.adobe.com/en_US/ColdFusion/9.0/Developing/WSB7BEC0B4-8096-498d-8F9B-77C88878AC6C.html
答案 1 :(得分:0)
是因为在你的函数的else语句中,你再次调用相同的函数名吗?所以它只是反复出现。
尝试重命名函数名称,使其不会覆盖隐式getter,看看会发生什么。例如
<cffunction name="getNewname" returnType="string">
<cfscript>
if (this.getLocked()) {
return this.getScreenName();
} else {
return this.getFullname();
}
</cfscript>