如何访问Sencha(Touch)模型的属性似乎有许多不同的方法。但是,我似乎无法找到适当的文档,说明哪种方法是“正确的”。
模型创建
var model = Ext.create('MyApp.model.MyModel', {
name: value,
foo: bar,
...
})
财产权限
model.get('name')
或model.set('name', newValue)
model.data.name
或model.data.name = newValue
model.raw.name
似乎总是返回一个字符串?答案 0 :(得分:3)
让我们全力以赴:
get
和set
方法是模型字段值的预期访问者。
model.data
是存储客户端模型值的对象,即使用字段配置从 server 代理接收的数据转换的类型(类型,转换方法等。)
model.raw
是从服务器代理收到的原始数据,然后转换为客户端应用程序域模型值。您应该避免使用它,否则您将自己绑在代理/服务器上。
model['name']
:正如您所说,它不起作用。不要希望它回来(我甚至不知道它在某一点上有效)。
现在,您应该使用哪一个?显然,最后两个已经不在比赛中了。
model.data
对象应该在大多数情况下给你预期的结果(见下文),并且应该给你一个边际性能增益,而不是调用函数。
然而,IMO你应该总是喜欢使用getter和setter,原因有两个。
首先,您团队中的某个人(或您过去的某个人)可能会认为getter / setter是添加一些自定义逻辑的好点。在这种情况下,直接使用data
对象绕过访问器也将绕过此逻辑,并产生不可预测的结果。
其次,getter和setter使调试某些情况变得更加容易,方便的是可以从模型值的修改位置来了解。我的意思是,如果有一天你会问自己“f ** k,为什么我的模型字段值会改变为这个?”。如果所有代码都使用了getter,那么你只需要在那里放一个断点,然后你就会抓住罪魁祸首。另一方面,如果被控制的代码直接使用data
对象,那么您将无法进行整个项目搜索......您无法确切地知道什么...... data.name =
? data['name'] =
? name:
?等
现在我想起来了,还有另外一个原因。显然是一个deprecated。但data
对象名称曾使用此persistenceProperty
选项进行自定义。因此,在某些情况下,data
对象甚至无法使用,执行model.data.name
而不是model[model.persistenceProperty].name
的代码会崩溃,简单明了。
简短回答:使用访问者。