3

我想通過keydown驗證用戶輸入。爲此,我需要一個keydown事件。 不幸的是我只發現自定義模型事件:Backbone查看自定義事件

initalize: function(){ 
    this.model = new ModelClass(); 
    this.model.bind("keydown", this.validate, this); 
} 

這種做法肯定是罰款模型事件,但我不相信這是視圖,用戶界面相關的東西以正確的方式...

爲了讓您更好的解釋,這就是我想用我的事件:

var SomeView; 

SomeView = Backbone.View.extend({ 
    events: { 
     "keydown input#some-field": "validate" // custom event 
     , "change input#some-field": "doSomethingElse" // predefined backbone event 
    }, 
    validate: function(attr){ 
     // validation 
    } 
}); 

那麼,什麼是創建自定義的骨幹事件,在視圖中調用的方法嗎?

回答

3

什麼是創建可在視圖中調用的自定義Backbone事件的方法? 我感覺好像你的問題不是問題,因爲backbone.view默認已經支持這些事件。 您可以編寫代碼像你想要什麼:

//This is the right thing to do 
SomeView = Backbone.View.extend({ 
    events: { 
     "keydown input#some-field": "validate" // custom event 
     , "change input#some-field": "doSomethingElse" // predefined backbone event 
    }, 
    validate: function(attr){ 
     // validation 
    } 
}); 

參考這裏: http://backbonejs.org/docs/todos.html#section-22

~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

編輯: 你可以在這裏看到: http://backbonejs.org/docs/backbone.html#section-156

最關鍵的一句話是:

this.$el.delegate(selector, eventName, method); 

因爲骨幹的事件是jquery的委託(http://api.jquery.com/delegate/),所以jQuery的代表支持事件,骨幹都可用。

+0

嗨,我仍然不明白如果Backbone可以觸發一個keydown事件,如果它沒有定義? – 2012-07-11 15:58:12

+1

@ dev.pus檢查我的更新答案:因爲backbone的事件是jquery的委託(http://api.jquery.com/delegate/),所以jQuery的代表支持事件,主幹是可用的。 – 2012-07-11 16:16:54

+0

現在我明白了,第一個單詞是jQuery eventname,第二個單詞是選擇器。 eventname可以是以下任何一種:http://api.jquery.com/category/events/。所以keydown實際上會一直工作,我應該在發佈之前嘗試過代碼...... :) – 2012-07-11 18:07:42

2

我不確定我是否瞭解問題所在。你的第二個例子絕對是我如何去設置Backbone Views中的事件處理程序。 Backbone的驗證方法只存在於模型中,並在模型設置和保存被調用之前自動調用。它是默認的未定義的。如果你在視圖中驗證,但你的方式應該工作。但我相信事件處理函數只能通過事件。所以它可能應該是

validate: function (event) { 
    // do Something here 
} 

你也應該記住骨幹事件代表團發生在埃爾。所以你需要手動設置它或渲染到它以便事件委派工作

+0

驗證只是一個例子。你能給我一個完整的代碼片段嗎?我不明白我如何註冊不存在的事件(因爲骨幹不提供這些事件),例如示例keydown事件 – 2012-07-11 15:59:28