【问题标题】:dynamic key in JSON file (used by backbone.js models for example...)JSON 文件中的动态键(例如由主干.js 模型使用...)
【发布时间】:2012-02-07 21:33:00
【问题描述】:

我正在尝试使用动态键创建一个主干.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 替换为其模型中的内容。 有没有想过我怎么能做到这一点? 提前致谢, 吉米

【问题讨论】:

    标签: javascript jquery json model backbone.js


    【解决方案1】:

    你不能直接这样做;对象文字中“:”的左侧必须是常量。你可以这样做:

    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 — 啊,我刚刚注意到“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"));
    

    【讨论】:

    • 我不明白你在问什么。需要注意的一点是,上面的 thiswindow.MyModel 赋值语句开头的任何内容,特别是它将 not 是被构造为参数的对象Model.extend()。我只是使用它,因为它在 OP 中。
    • 感谢 Pointy 的解决方案。虽然这不是一个简单的方法,但没有其他方法可以做到这一点,它现在可以完美运行。
    【解决方案2】:

    您不能在定义对象键时使用变量。你可以试试这样的。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-24
      • 2020-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多