dynamic key in JSON file (used by backbone.js models for example...)
You won't be able to do that directly; the left side of the ":" in an object literal must be a constant. What you can do is this:
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)});
edit — ah, I just noticed that "myDynamicVar" itself is part of the outer object. There's no way to refer to it with this
in such a way, so if that's what you're trying to do the code would be different:
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;}());
If you want myDynamicVar
itself to be dynamic, then you could pass it in as a parameter:
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"));
You cannot use a variable in defining the object key. You can try something like this.
window.MyModel = Backbone.Model.extend({ myDynamicVar : "country", urlRoot: "api/myModel", defaults: { "id": null, "country": { "route":"test/test/test", "class":".usa2", "txt":"USA 2" }, "region": "California", "year": "", "description": "", "picture": "" }});window.MyModel.defaults[this.myDynamicVar] = "USA";