2012-01-24 7 views
1

私はsavesuccessコールバックを使用して私のモデルを保存して更新しています。backbone.js更新と表示の追加

しかし、モデルが新しいかどうかに応じて別のaddビューを定義する方法や既存のモデルを更新する方法を理解しようとしています。

これはサーバー側ではありません。サーバーの作成/更新は正常に動作していますが、私はビューを更新するための「正しい」方法を見つけようとしています。

私のコードは非常に単純です

 
Myapp.FormInput = Backbone.Views.extend({ 

    initialize: function(){... 

}, 

submit_form: function(){ 
    if(this.id===undefined){ 
      // this is a new model, so create it 
     model.set(new Myapp.Model.set(Myapp.Models.Helpers.serialize_objects(form))); 
     model.set({parent_id:parent.id}); 
    } else { 
     // this is an update to an existing model, so just update the model 
     model.set(Myapp.Model.set(Myapp.Models.Helpers.serialize_objects(form))); 
     model.url+='/'+this.id; 
    } 

    model.save(model, 
      {success: function(model){ 
       Myapp.Collection.add(model); 
      }, error: function(){ 
      alert('error creating or updating'); 
     }} 
    }); 

}); 

答えて

1

私は何を編集し、「モデル」せずにいた場合、私は場合は、「モデル」でルータから「表示」を初期化されてやりたいです私は最初から新しい「モデル」を作り出しています。 アイデアは次のようになります。

var Workspace = Backbone.Router.extend({ 

    routes: { '/collection/:id'   : 'edit_model', 
      '/collection/newObject' : 'new_model 
    }, 

    new_model : function(){ 

     myView = new A_View(); 
    }, 

    edit_model : function(){ 

     myView = new A_View({model:aModel}); 
    } 
}); 

そして、「レンダリング」メソッドでは、このビューインスタンスでモデルをチェック。

しかし、これは、アプリケーションがモデルの編集や作成に異なるルートを使用する場合にのみ機能します。たぶんあなたは、同じ経路ですべてのことを最も精巧な方法でやっているかもしれません(またはあなたは他の理由があります)。

あなたはこのような何かを試みることができる:

ビューであなたのmodel.save「成功」関数を定義します(それはあなたがあなたの例では、あなたのsubmit_formを定義するのと同じ方法で)あなたが関連付けるコード行を追加しますこのビューのモデル:

successSaving : function(model){ 
    Myapp.Collection.add(model); 
    this.model = model; //here you save the model in your view. 
} 

これが機能するためには、あなたの新しい成功の機能(これはあなたが外でそれを定義する理由である)にビューをバインドする必要があります。 「その後、かどうかを確認、

_.bindAll(this, 'successSaving'); 

今、あなたの「レンダリング」メソッドでフォームをレンダリングすることができますし、: あなたは(「_bind」についての詳細情報をhere)をこのように機能を初期化ビューでそれを作ることができますthis.model 'は'未定義 'ですが、そうでない場合は、コンテンツを埋めなければならないことがわかりました。

免責事項:私はコードをチェックしていないので、おそらくコピーの貼り付けはうまくいかないかもしれませんが、うまくいけばアイデアを得ることができます。

+0

ロバートありがとう、私はあなたが昨日ここで言うことに似た何かをやり終えた。私が今やっていることは、モデル上でbindメソッドを使うことです。 1つは保存用、もう1つは更新用です。成功は実際には空になります。あなたのやり方はそれを語る長い道のりだったと思うので、私はあなたに勝利を与えた! – pedalpete

関連する問題