2013-09-24 50 views
0

我已經在ItemView控件定義以下事件時,ItemView控件觸發:無效的模型事件不

modelEvents: { 
      "change": "refresh", 
      "invalid": "handleValidation" 
     } 

,並在我的模型的驗證功能:

validate: function(attrs) { 
      if(attrs.Code == "") 
       return "Error in Code field"; 
      else if(attrs.Name == "") 
       return "Error in Name field"; 
     } 

的問題是,當我保存了模型的一個實例,驗證函數在模型中被調用併成功返回字符串消息,但是ItemView中的無效事件未被觸發。

謝謝

+0

你有沒有爲監聽器代碼在你看來,你可以後呢?即listenTo(this.model,'invalid',myHandler); – redconservatory

+0

嗨,監聽器的代碼是上面稱爲modelEvents的部分。 – bampakoa

回答

0

你現在應該有什麼工作。您提供的代碼中必須有一些斷開連接。我已經創建一個簡單的jsfiddle該樣品你想要的功能:http://jsfiddle.net/craigjennings11/DZtDm/

var View = Backbone.Marionette.ItemView.extend({ 
    el: '#content', 
    template: _.template('<button>Hello World</button>'), 
    events: { 
     'click button': 'tryToSave' 
    }, 
    modelEvents: { 
     'invalid': 'failedValidation' 
    }, 
    tryToSave: function() { 
     this.model.save(); 
    }, 
    failedValidation: function(err) { 
     this.$el.append('<div>' + err.validationError + '</div>'); 
    } 
}); 
0

您應該觸發'無效'事件並返回錯誤meggase作爲屬性。

validate: function(attrs) { 
     if(attrs.Code == "") 
      this.trigger('invalid', 'Error in Code field'); 

     else if(attrs.Name == "") 
      this.trigger('invalid', 'Error in Name field'); 
    } 

像這樣。

+0

這對我很有用,非常感謝。儘管現在這個事件無效,但我的模型被保存了。它是否應該防止模型如果無效被釋放保存? – bampakoa

+0

無需手動觸發此事件,因爲在驗證失敗的情況下,Backbone會自動處理觸發事件。 –