2011-11-23 41 views
2

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

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

var appState = new AppState(); 

一些defults数据然后在路由器我与新值阵列模式是这样的:

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

现在在一个循环周期我更新所有收到的参数... 我意识到这样

appState.attributes[arg] = val; 

但我认为目前尚不清楚,因为在Backbone.js的文档中,我读到了有关“属性”方法的信息,请参阅: “请使用set来更新属性,而不是直接修改它们。” 所以我的问题是:我如何使用set方法更改默认属性?

回答

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 如果你更频繁地使用这种技术,你总是可以在一个辅助方法提取功能。

+0

是的,这是逻辑,但我的问题是,如何在循环: 我的意思是如果我有键和字符串与值的字符串,我怎么可以使用.set()? 例如。此代码不起作用: var key ='country',value ='some value'; model.set({key,value}); – Bobbe

+0

我改变了我的答案,您需要插入更改。实际上它们被设置为一个对象,您不需要循环和设置,但是您确实需要一个循环来创建该对象:s – Sander

+0

'var attrs = {}; attrs [key] = value; 'model.set(attrs);' – maxl0rd

相关问题