使用Backbone.js我知道强烈建议使用set方法设置模型的属性,而不是直接修改attributes internal hash。
然而,除了不自动触发“更改”事件之外,还有哪些其他缺点或“副作用”直接修改内部哈希?
我面临的问题是,虽然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
答案 0 :(得分:15)
好吧,如果你查看annotated source code,你会发现set
做了很多。
如果您使用为您执行此操作的函数扩展Backbone.Model会怎样:
Backbone.Model.prototype.setByName = function(key, value, options) {
var setter = {};
setter[key] = value;
this.set(setter, options);
};
然后,您可以直接在模型上执行您想要的操作:
var model = new Backbone.Model();
model.setByName(myProperty, "bar");
这对我来说是一个更好的解决方案。
修改强>
正如@ earl3s指出的那样,在更新版的Backbone中不再需要这样做了。今天,您可以致电model.set(myProperty, "bar")
,它可以满足您的需求。
答案 1 :(得分:7)
在Brian Genisio提到的annotated source code中,您可以阅读以下内容: “处理”键“,值和{键:值}式参数。” 所以你可以使用model.set(myProperty,“bar”,options)。 也许他们在Brian Genisio的帖子之后添加了这个功能..我不知道。