2012-02-07 21 views
3

我正在嘗試使用動態鍵創建backbone.js模型,但似乎無法完成正確的操作。JSON文件中的動態鍵(由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由它在我的模型的內容所取代。 任何想法我怎麼能做到這一點? 在此先感謝, 吉米

回答

3

你將無法直接做到這一點;對象字面值中的「:」的左側必須是常量。你可以做的是這樣的:

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以這樣的方式,因此,如果這就是你想要做的代碼會有什麼不同:如果你想myDynamicVar本身是動態

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

,那麼你可以通過它作爲參數:

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")); 
+0

您測試了您的解決方案嗎?看看這個:http://jsfiddle.net/73LBD/ – czerasz 2012-02-07 22:39:48

+0

我不明白你在問什麼。有一點需要注意的是,上面的'this'就是'window.MyModel'賦值語句的開頭,特別是它不會是作爲參數構造的對象, Model.extend()'。我只是用它,因爲它在OP中。 – Pointy 2012-02-07 23:15:54

+0

非常感謝您的解決方案。這不是一個簡單的方法,但沒有其他的方式來做到這一點,它現在完美。 – 2012-02-29 21:44:20

1

在定義對象鍵時不能使用變量。你可以嘗試這樣的事情。

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"; 
相關問題