让我们整理一下:
get
和set
方法是模型字段值的预期访问器。
model.data
是存储客户端模型值的对象,即使用字段配置(类型、转换方法等)从服务器代理接收的数据转换而来的对象。
model.raw
是从服务器代理接收的原始数据,在它被转换为客户端应用程序域模型值之前。您应该避免使用它,否则您会将自己绑定到您的代理/服务器。
model['name']
: 正如你所说,它不起作用。不要希望它回来(我什至不明白它在某一时刻有效)。
现在,您应该使用哪一个?显然,最后两个已经出局了。
在大多数情况下,该model.data
对象应该为您提供预期的结果(见下文),并且应该为您提供其他调用函数的边际性能增益。
但是,IMO 您应该始终更喜欢使用 getter 和 setter,原因有两个。
首先,您团队中的某个人(或过去的您)可能会认为 getter/setter 是添加一些自定义逻辑的好点。这种情况下,直接使用 data
对象绕过访问器也会绕过这个逻辑,产生不可预知的结果。
其次,getter 和 setter 使调试某些情况变得非常容易,因为它可以很容易地知道模型值的修改来自何处。我的意思是,如果有一天你问自己“f**k,为什么我的模型字段值会变成这个??”。如果所有代码都使用 getter,那么您只需在其中放置一个断点,您就会将罪魁祸首捉到囊中。另一方面,如果被指控的代码data
直接使用该对象,您将被困在整个项目中搜索...您无法确切知道是什么... data.name =
?data['name'] =
? name:
? 等等
现在想来,还有一个原因。显然已弃用。但是data
对象名称过去可以使用此persistenceProperty
选项进行自定义。因此,在某些情况下,该data
对象甚至不可用,并且代码做model.data.name
而不是model[model.persistenceProperty].name
会崩溃,简单明了。
简短的回答:使用访问器。