2016-03-01 63 views
0

我正在創建一個點擊模型,並想知道哪裏是最好的地方來聽取模型上的驗證事件?我創建了模型,在屬性上設置了輸入值,然後創建了一個監聽器,在點擊處理程序中讓這個監聽器感覺不對,但也許我錯了?在點擊時聆聽新創建的模型?

JS

buttonClicked: function(event) { 
      var input = this.$('.js-input'), 
       itemValue = input.val(), 
       model = new Item({ 
        item: itemValue 
       }, { 
        validate: true 
       }); 

     this.listenTo(model, 'invalid', this.onFormError, this); 
    } 

鏈接codepen http://codepen.io/styler/pen/rearYp

+0

你似乎沒有做用'model'參考什麼。正如亞歷克斯指出的,這取決於你在做什麼。你是否將它傳遞給了一個新的觀點?你把它添加到一個集合..?既然你在評論中提到了*待辦事項*,你必須有一個收藏或什麼東西?請編輯該問題並添加更多信息。 –

回答

1

這取決於你與模型做什麼。如果你想在新視圖中顯示它,驗證應該在新視圖的初始化中。

var view= Backbone.View.extend({ 
    model:Item, 
    initialize: function (model, options) { 
    this.listenTo(this.model, 'invalid', this.onFormError, this); 
    }, 
    ...... 
} 

如果你在本地使用它,你可以讓它在點擊處理程序上。

試試這個...............

var view= Backbone.View.extend({ 
    model:Item, 
    initialize: function (model, options) { 
     this.model= new Item(); 
     this.listenTo(this.model, 'invalid', this.onFormError, this); 
     this.render(); 
    }, 
    buttonClicked: function(event) { 
     var input = this.$('.js-input'), 
     itemValue = input.val(), 
     this.model.set('item', itemValue); 
     if(!this.model.isValid(true)){ 
       return; 
     } 
    } 
    ...... 
} 
+0

這是一個模型不存在,直到用戶單擊提交和模型創建,所以我不能在初始化中偵聽this.model,或者如果您知道我的意思,我會得到一個錯誤? – styler

+0

我想我明白你想要做什麼。糾正我,如果我錯了:你想有一個模型,驗證提交表單。 如果是這樣,在當前視圖初始化您應該創建一個空的模型,將驗證鏈接到它,並在渲染鏈接到模板。提交時設置新值並調用驗證。 (請參閱編輯的代碼) 如果不讓我知道您的用戶故事。 –

+0

是的,用戶每次都會提交一個新的項目模型,我不能在初始化時初始化模型,因爲每次提交時模型都必須是新的 - 想想一個待辦事項列表 - 提交一個待辦事項,確保輸入通過驗證不是空的 – styler