在Backbone中,model.get('foo')和model.attributes.foo之间的任
In Backbone, any difference between model.get('foo') and model.attributes.foo?
在Backbone.js中,有两种方法可以获得单个属性的值:
-
var foo = model.get('foo');
-
var foo = model.attributes.foo;
.get()
方法是文档中推荐的方法,但可能会慢一点,因为它涉及到额外的函数调用。
有什么理由为什么我不应该使用.attributes
方法?是否存在会导致意外行为的情况?
这是一个封装问题。通过使用get方法,你说我不在乎它是如何实现的,我只想要那个属性。所以在将来,如果你想重写你的get方法来返回一些更有意义的东西,你就不必在你使用该属性的任何地方做代码更改。
例如,如果你的模型有一个与之相关联的属性成本,它是一个数字。
model.get('cost') //would give you that number say 1999.99
如果将来你想让它返回一个格式化的字符串,你可以重写get方法。
model.get('cost') // same method would now give you $1999.99 or EUR 1999,99 in french :)
你还减少了代码量,增加了可读性。
model.get('foo')比model.attributes.foo;而且更短
正如您在问题中提到的,.get()
方法是文档中推荐的方法。尽管直接调用该属性可以节省几纳秒的时间,但您不应该这样做。
的原因是它可能鼓励别人阅读你的代码使用相同的方法来设置一个属性:model.attributes.foo = 'blah';
我可能不用告诉你这很糟糕。代码似乎可以工作,因为您在模型上获得了正确的值,但是您绕过了骨干网中内置的所有更改跟踪逻辑。如果这样设置属性,则不会触发任何事件。
也就是说,如果除了你自己没有其他人在读你的代码或者修改你的代码,并且你非常关心那些额外的纳秒,并且你知道以后你将不会犯这种类型的错误。那么无论如何,直接使用attributes属性
相关文章:
- Ember Data DS.Model's set函数不起作用
- C#asp.net mvc Set CheckBoxFor已检查的具有Model Value的属性
- if(foo!==null)的计算结果为true,即使foo为null
- Rails将JavaScript对象存储到Model的有效方式
- 渲染<选项值=“;foo”;选择>在服务器上
- 从 Javascript 中设置 ng-model name
- Nano Scroller在引导程序DropDown和Model Box中不起作用
- Model中的Typeahead返回空值以形成输入字段
- 代码挑战:创建一个跟踪对象实例总数的类Foo
- 动态地从“;joint.shapes.devs.Model”;JointJS
- 为什么“foo()”在这里有效
- 如何修改或类似@model.count的内容,根据单元格值计算行数
- Toggle Switch在包含ng model和ng repeat之后不进行切换
- 在Angularjs中,我如何使用ng repeat、ng model和ng click来动态更改内容
- Backbone model.change() not firing
- mongoose.js Model.remove在循环中只能工作一次
- vue-js-单选按钮won't默认情况下使用v-model属性进行检查
- 当与之关联的 ng-model 为 false 时,Angularjs 复选框值不会取消选中
- 在Backbone中,model.get('foo')和model.attributes.foo之间的任
- 取消隐藏一个数据绑定的东西(ng-model或{{food.Foo}})会破坏绑定