динамический ключ в файле JSON (например, используется моделями backbone.js ...) - PullRequest
3 голосов
/ 08 февраля 2012

Я пытаюсь создать модель backbone.js с динамическими ключами, но, похоже, не могу сделать это правильно.

Вот моя модель:

window.MyModel = Backbone.Model.extend({
    myDynamicVar : "country",
    urlRoot: "api/myModel",
    defaults: {
        "id": null,
        this.myDynamicVar : "USA",
        "country":  {
            "route":"test/test/test",
            "class":".usa2",
            "txt":"USA 2"
        },  
        "region":  "California",
        "year":  "",
        "description":  "",
        "picture":  ""
      }
});

Здесь я пытаюсь заменить myDynamicVar его содержимым в моей модели. Есть мысли, как мне это сделать? Заранее спасибо, Jimmy

Ответы [ 2 ]

3 голосов
/ 08 февраля 2012

Вы не сможете сделать это напрямую; левая часть символа «:» в литерале объекта должна быть константой. Что вы можете сделать, это:

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)
});

изменить & mdash; ах, я только что заметил, что «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"));
1 голос
/ 08 февраля 2012

Нельзя использовать переменную при определении ключа объекта.Вы можете попробовать что-то вроде этого.

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";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...