2012-04-27 21 views
9

Backbone.js 0.5.3からBackbone.js 0.9.2 で作業していたサイトをアップグレードすると、私のオプションのパラメータとして未定義私のモデルでは、メソッドの初期化を使用します。機能(オプション)ここで[OK]を{enter code here }バックボーン初期化:V9で機能しない機能(オプション)

は私のモデル構造である:何がV.9にV.5から

初期化を変更しました。 0.5.3ではすべてがうまく動作しますが、0.9.2オプションを使用しても機能しなくなりました。

this.myModel = Backbone.Model.extend({ 

     defaults: function() { 
      return { 
       maxDays: 7, 
       index: 0 

      }; 
     }, 

     initialize: function(options) { 

     } 

}) 



this.model = new myModel(); 

バージョン0.5.3のオプションでは、defaultsオブジェクトに設定されたすべての属性が表示されます。 しかしバージョン0.9.2ではこれはもはや機能しません、それは未定義を返します。 クライアントの機密性のためにリンクを投稿できません。

答えて

15

初期化のシグネチャは変更されません。私は0.5から0.9と考えています。しかし、コンストラクタに渡すと渡されるオプションのみを取得します。 annotated source for Backbone.Modelをチェックしてください。

this.initialize.apply(this, arguments); 

だからどんなあなたは、コンストラクタに渡すことは初期化そのまま渡されます:あなたは新しいモデルのインスタンスをインスタンス化するたびに、コンストラクタはこれを行います。だから、新しいモデルインスタンスをインスタンス化するが、2つの引数(属性とオプション)を渡さない場合は、コードを見てください。

あなたのコードサンプルに基づいて、あなたは今、2つのパラメータ取るようinitializeを定義する必要があります:あなただけのオプションを渡したい場合は、attributesoptionsをし、あなたのモデルを作成する際ください:

var model = new Model(null, options); 

または

var model = new Model({}, options); 

あなたのコードを壊した具体的な変更は、0.5.3の明示的な引数でinitializeを呼び出すことから0.9.3のapplyとargumentsを次のように変更することだと思います。

this.initialize.apply(this, arguments); 

だから、0.9で、あなたはthis.attributesを通して、あなたのデフォルト設定へのアクセスを得ることができますが、彼らはコンストラクタ関数へのパラメータとして送られてきた場合を除き、それらは、関数のパラメータとしてで来ることはありません。引数が空であるため、[], undefined, Objectを記録します

var MyModel = Backbone.Model.extend({ 
    defaults: {x: 42, y: 43}, 
    initialize: function(attributes, options) { 
     console.log(arguments, attributes, this.attributes);} 
}); 
var m = new MyModel(); 

、何がコンストラクタに渡されなかったが、デフォルトはあなたがそこに使用するためにthis.attributesに設定しているされているので、定義されていない属性。

+0

上記のコードを追加しました。したがって、初期化には2つのパラメータが必要です。オプションは2番目になりました。しかし、V5から変更されていないとすれば、それはV5ではなくV5の1つのパラメータで動作する理由を説明していません。 – user1096509

+0

0.5.3のソースコードを確認しました:https://github.com/documentcloud/バックボーン/ blob/29b60e53fa18b6fffb4a21d0d1c8c9fdbde43b6c/backbone.js#L132および0.9.2ソースコード:https://github.com/documentcloud/backbone/blob/863814e519e630806096aa3ddeef520afbb263ff/backbone.js#L189これらの属性とオプションの両方を使用します。今すぐあなたのコードを見て... –

+0

私はコードに2番目のパラメータを追加しましたが、それでもV9の両方のパラメータについて未定義を返します。初期化:関数(属性、オプション){これはあなたが参照しているものですか?次に、V5では、セットアップで最初のパラメータのみが機能します。 – user1096509