dynamic key in JSON file (used by backbone.js models for example...) dynamic key in JSON file (used by backbone.js models for example...) json json

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";