似乎有多种方法可以访问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
无论模型定义中的数据类型是什么,似乎总是返回一个字符串?让我们整理一下:
get
和set
方法是模型字段值的预期访问器。
model.data
是存储客户端模型值的对象,客户端模型值是使用字段配置(类型,转换方法等)从 服务器 代理接收的数据中转换而来的 。
model.raw
是在转换为 客户端 应用程序域模型值之前从 服务器 代理 接收的原始数据 。您应该避免使用它,否则将自己绑定到代理/服务器。
model['name']
:正如您所说,它不起作用。不要希望它回来(我什至根本不了解它在某一时刻起作用)。
现在,您应该使用哪一个?显然,最后两个已经不匹配了。
model.data
在大多数情况下,该对象应给您预期的结果(请参见下面的内容),而其他调用函数的对象应给您带来边际性能的提高。
但是,出于两个原因,IMO您应该始终更喜欢使用getter和setter。
首先,您的团队中的某个人(或您过去的人)可能会认为getter / setter是添加一些自定义逻辑的好方法。在这种情况下,data
直接使用对象绕过访问器也将绕过此逻辑,并产生不可预测的结果。
其次,getter和setter使得从某些地方修改模型值变得容易知道,从而使调试某些情况确实更加容易。我的意思是,如果有一天你要问自己“ f ** k,为什么我的模型字段值变成这个?”。如果所有代码都使用吸气剂,则只需要在其中放置一个断点,就可以抓到罪魁祸首。另一方面,如果包含代码的代码data
直接使用了该对象,则您将被困在整个项目搜索中……您无法确切地知道…… data.name =
。data['name'] =
?name:
?等等
现在我考虑了,还有另一个原因。一个弃用一个明显。但是data
对象名称曾经使用此persistenceProperty
选项可自定义。因此,在某些情况下,该data
对象甚至将不可用,而执行代码model.data.name
而不是model[model.persistenceProperty].name
崩溃,简单明了。
简短的答案:使用访问器。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句