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

Javascript 如何在Backbone.js中使用set方法更改默认模型属性,javascript,backbone.js,Javascript,Backbone.js,我在模型中有一些结果数据 window.AppState = Backbone.Model.extend({ defaults: function() { return { country: false, region: false }; } }); var appState = new AppState(); 然后在路由器中,我得到一个数组,该数组具有如下模型的新值: [["country", "new country value"], [

我在模型中有一些结果数据

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

var appState = new AppState();
然后在路由器中,我得到一个数组,该数组具有如下模型的新值:

[["country", "new country value"], ["region", "new region value"]]
现在在一个for循环中,我更新所有接收到的参数。。。 我是这样认识的

appState.attributes[arg] = val;
但我认为这并不清楚,因为在Backbone.js的文档中,我读到了“attribute”方法,并看到了以下内容: “请使用set更新属性,而不是直接修改属性。” 所以我的问题是:如何使用set方法更改默认值的属性?

试试
.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());
window.AppState=Backbone.Model.extend({
默认值:函数(){
返回{
国家:错,
地区:假
};
}
});
var appState=新的appState();
//当您获得新值数组时,可以将其转换为对象
var myArray=[“国家”、“新国家/地区值”]、[“地区”、“新地区值”];
var newValues={};
对于(变量i=0;i
备注 这个for循环在很大程度上取决于数组的结构,我编写它的方式将适用于您在示例中给出的数组,如果有任何更改,您将需要更改for循环的工作方式

备注2
如果您更经常地使用这种技术,您总是可以在助手方法中提取该功能。

是的,这是逻辑,但我的问题是,如何在循环中生成:我的意思是,如果我有带键的字符串和带值的字符串,我如何使用.set()生成它?例如,此代码不起作用:var key='country',value='some value';set({key,value});我用您需要插入的内容更改了我的答案。实际上,它们被设置为一个对象,您不需要循环和设置,但是您确实需要一个循环来创建对象:s
var attrs={};属性[键]=值;模型集(attrs)是的,这是真的=)非常感谢你,桑德和马克斯。这就是我的意思,现在它工作得很好。