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

时间:2011-09-13 22:44:46

标签: backbone.js

使用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

2 个答案:

答案 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的帖子之后添加了这个功能..我不知道。