2011-11-23 69 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

相關問題