backbone.js直接设置模型内部属性哈希

for*_*ice 11 backbone.js

使用Backbone.js我知道强烈建议使用set方法设置模型的属性,而不是直接修改属性内部哈希.

但是,除了不自动触发"更改"事件之外,还有哪些其他缺点或"副作用"直接修改内部哈希?

我面临的问题是,虽然set方法采用对象文字,但我需要使用在运行时确定的变量来指定左侧.谢谢.

myModel.set({
    myProperty : myValue; //myProperty is a variable, so this is invalid syntax
})

//vs

myModel.attributes[myProperty] = myValue; //myProperty is a variable that can be evaluated
Run Code Online (Sandbox Code Playgroud)

Bri*_*sio 15

好吧,如果你看一下带注释的源代码,你会发现它set做了很多.

如果您使用为您执行此操作的函数扩展Backbone.Model,该怎么办?

Backbone.Model.prototype.setByName = function(key, value, options) { 
    var setter = {}; 
    setter[key] = value; 
    this.set(setter, options); 
};
Run Code Online (Sandbox Code Playgroud)

然后,您可以直接在模型上执行您想要的操作:

var model = new Backbone.Model();
model.setByName(myProperty, "bar");
Run Code Online (Sandbox Code Playgroud)

这对我来说是一个更好的解决方案.

编辑

正如@ earl3s指出的那样,在最近的Backbone版本中不再需要这样做了.今天,你可以打电话model.set(myProperty, "bar"),它可以做你想要的.


qbo*_*lec 7

在Brian Genisio提到的带注释的源代码中,您可以阅读以下几行:"处理"键",值和{键:值}式参数." 所以你可以使用model.set(myProperty,"bar",options).也许他们在Brian Genisio的帖子之后添加了这个功能..我不知道.