2012-01-24 84 views
1

我有我的模型使用savesuccess回調保存和更新。backbone.js更新vs添加視圖

但我想弄清楚如何定義一個單獨的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. 
} 

爲了這個工作,你必須認爲你的新的成功的功能(這是你的外部定義它的原因)結合。 你可以使它在視圖初始化函數這樣的(更多有關「_bind」 here):現在

_.bindAll(this, 'successSaving'); 

,在「渲染」的方法,你可以渲染的形式,並在此之後,檢查是否「 'this.model'是'未定義',如果不是,你現在知道你必須填寫內容。

聲明:我沒有檢查代碼,所以可能複製粘貼不起作用,但希望你能明白。

+0

感謝羅伯特,我最終做了類似於你昨天在這裏說的話。我現在要做的就是在模型上使用綁定方法。一個用於保存,一個用於更新。成功實際上最終是空的。我認爲你的方式有很長的路要說,所以我給了你勝利! – pedalpete

相關問題