你將無法直接做到這一點;對象字面值中的「:」的左側必須是常量。你可以做的是這樣的:
window.MyModel = Backbone.Model.extend({
myDynamicVar : "country",
urlRoot: "api/myModel",
defaults: function(fieldName) {
var value = {
"id": null,
"country": {
"route":"test/test/test",
"class":".usa2",
"txt":"USA 2"
},
"region": "California",
"year": "",
"description": "",
"picture": ""
};
value[fieldName] = "USA";
return value;
}(this.myDynamicVar)
});
編輯 —啊,我只注意到「myDynamicVar」本身是外部對象的一部分。有沒有辦法來引用它與this
以這樣的方式,因此,如果這就是你想要做的代碼會有什麼不同:如果你想myDynamicVar
本身是動態
window.MyModel = Backbone.Model.extend(function() {
var value = {
myDynamicVar : "country",
urlRoot: "api/myModel",
defaults: {
"id": null,
"country": {
"route":"test/test/test",
"class":".usa2",
"txt":"USA 2"
},
"region": "California",
"year": "",
"description": "",
"picture": ""
}
};
value.defaults.[value.myDynamicVar] = "USA";
return value;
}());
,那麼你可以通過它作爲參數:
window.MyModel = Backbone.Model.extend(function(whichProperty) {
var value = {
myDynamicVar : "country",
urlRoot: "api/myModel",
defaults: {
"id": null,
"country": {
"route":"test/test/test",
"class":".usa2",
"txt":"USA 2"
},
"region": "California",
"year": "",
"description": "",
"picture": ""
}
};
value.defaults.[value[whichProperty]] = "USA";
return value;
}("myDynamicVar"));
您測試了您的解決方案嗎?看看這個:http://jsfiddle.net/73LBD/ – czerasz 2012-02-07 22:39:48
我不明白你在問什麼。有一點需要注意的是,上面的'this'就是'window.MyModel'賦值語句的開頭,特別是它不會是作爲參數構造的對象, Model.extend()'。我只是用它,因爲它在OP中。 – Pointy 2012-02-07 23:15:54
非常感謝您的解決方案。這不是一個簡單的方法,但沒有其他的方式來做到這一點,它現在完美。 – 2012-02-29 21:44:20