如何使用Backbone.js中的set方法更改默认模型属性

时间:2011-11-23 15:10:45

标签: javascript backbone.js

我在Model

中有一些defults数据
window.AppState = Backbone.Model.extend({
  defaults: function() {
    return {
      country:  false,
      region: false
    };
  }
});

var appState = new AppState();

然后在路由器I中获取具有模型新值的数组,如下所示:

[["country", "new country value"], ["region", "new region value"]]

现在在for循环中循环更新所有收到的参数... 我这样认识到了

appState.attributes[arg] = val;

但我觉得它不清楚,因为在Backbone.js的文档中,我读到了"属性"方法,看看这个: "请使用set来更新属性,而不是直接修改它们。" 所以我的问题是:如何使用set方法更改默认值的属性?

1 个答案:

答案 0 :(得分:9)

尝试.set()功能......

appState.set({arg : val});

一旦使用.set()设置参数,它将覆盖默认值。

您的示例稍作修改:

window.AppState = Backbone.Model.extend({
  defaults: function() {
    return {
      country:  false,
      region: false
    };
  }
});

var appState = new AppState();

// when you get your array of new values you can turn it in an object
var myArray = [["country", "new country value"], ["region", "new region value"]];
var newValues = {};
for (var i = 0; i < myArray.length; ++i)
{
    newValues[myArray[i][0]] = myArray[i][1];
}

// set the properties to the new values
appState.set(newValues);

// if you now return the json of the model, it has changed properties
console.log(appState.toJSON());

<强>备注 这个for循环在很大程度上取决于你的数组的结构,我写它的方式将适用于你在你的例子中给出的数组,如果有任何改变你将需要更改for循环的工作

备注2 如果您经常使用此技术,则可以始终使用辅助方法提取该功能。