2013-12-16 81 views
2

//當我單擊kickassessor按鈕時,它將更新數據庫,但視圖不會更新。這是我的代碼。 返回Marionette.ItemView.extend({Backbone.marionette在模型更改上重新渲染視圖

initialize : function (options) { 
     var self = this; 

     _.bindAll(this); 

     _.each(options, function (value, key) { 
      self[ key ] = value; 
     }); 
     //this.model.on('change', this.render, this); 

     return this; 
    }, 


    // Ui events hash 
    events : { 
     'mouseover a.btn' : 'showTooltip', 
     'click #kickBtn' : 'kickAssessor', 
     'click #deleteBtn' : 'deleteUser' 
    }, 

    // on render callback 
    onRender : function() { 
     this.ui.kickBtn.tooltip({ 
      title : 'Kick as assessor' 
     }); 

     this.ui.deleteBtn.tooltip({ 
      title : 'Delete user' 
     }); 
    }, 

    kickAssessor : function () { 
     this.model.save({role:'2'}); 
        //on success it should update the itemview 
    }, 

回答

9

您可以添加modelEvents哈希(https://github.com/marionettejs/backbone.marionette/blob/master/docs/marionette.itemview.md#modelevents-and-collectionevents):

modelEvents: { 
    "sync": "render" 
} 

以上將調用render功能每個模型與服務器同步的時間

+0

我試過這個解決方案,但仍然沒有工作。它不更新視圖// modelEvents:{ 'change':'modelChanged' }, modelChanged:function(){ //console.log('model change'); this.render(); \t} – mouthzipper

+2

只是注意到你更新模型的方式(通過調用'save')不會觸發「更改」事件。我已經更新了我的答案以使用「同步」事件,當服務器響應'save'調用時將觸發該事件。 –

+0

請記住,onShow事件只在初始渲染時調用,而不是重新渲染。 – adibble

相關問題