これを直接行うことはできません。オブジェクトリテラルの ":"の左側は定数でなければなりません。あなたにできることはこれです:
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
でそれを参照する方法はないので、それはあなたがコードが異なるだろうやろうとしているものだとします
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;
}());
あなたはmyDynamicVar
自体は、あなたがして、ダイナミックになりたい場合はパラメータとして渡すことができます:
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
私はあなたが求めているものを正確に理解していません。注意すべき点は、上記の 'this'は' window.MyModel'代入文の始めにあるものであれば何でも構いません。特に、 'window.MyModel'代入文の引数として構築されているオブジェクトではなく**、 Model.extend() '私はそれがOPにあったので、それを使用しました。 – Pointy
ありがとうございました。それは簡単な方法ではありませんが、それを行う他の方法はありませんし、今は完全に動作します。 –