2012-02-07 11 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でそれを参照する方法はないので、それはあなたがコードが異なるだろうやろうとしているものだとします

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

あなたはあなたのソリューションをテストしましたか?これを見てみましょう:http://jsfiddle.net/73LBD/ – czerasz

+0

私はあなたが求めているものを正確に理解していません。注意すべき点は、上記の 'this'は' window.MyModel'代入文の始めにあるものであれば何でも構いません。特に、 'window.MyModel'代入文の引数として構築されているオブジェクトではなく**、 Model.extend() '私はそれがOPにあったので、それを使用しました。 – Pointy

+0

ありがとうございました。それは簡単な方法ではありませんが、それを行う他の方法はありませんし、今は完全に動作します。 –

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"; 
関連する問題