2014-06-24 38 views
0

我正在構建一個使用骨幹網的web應用程序,並且在我的事件未正確綁定到相應對象的問題中繼續運行。如何以及何時使用.on或事件:{} with backbone

我正在使用骨幹結合qunit和sinon進行測試。 我想捕捉連接錯誤,如果他們正在作出。 我對骨幹集合的理解是,無論何時調用collection.create()骨幹,都將通過集合將新模型保存到服務器,因此應調用"request","sync"或可能的"error"事件。所以,在我的收藏我已經補充說:

var CProduct = Backbone.Collection.extend({ 

    // Code 

    events : { 
     'sync' : 'success', 
     'error' : 'fail' 
    }, 
    success : function() 
    { 
     console.log('success'); 
    }, 
     fail: function() 
    { 
     console.log('sync error'); 
    }, 

    // More code 
}); 

在我的代碼一些其他的點,這是通過點擊一個按鈕觸發:

createProduct 
{ 
    alert('creating model'); 
    var title = $('#title').val(); 
    var description = $('#description').val(); 
    this.collection.create({'title':title,'description':description}); 
} 

當警報是檢查是否通過點擊這個特殊的事件是發射 和收集是CProduct集合。請注意,這是在包含該集合的視圖中。

我用興農僞造調用服務器並repley用下面的代碼:

module("Product models",{ 
    setup: function(){ 
     server = sinon.fakeServer.create(); 
    }, 
    teardown: function(){} 
} 

asyncTest("someTest", 1 , function(){ 

    //Some preparation code 

    var test = function(eventData) { 
     console.log(eventData); 
     server.respond(); 
    }; 

    server.respondWith("GET", "/api/testmodel/1",[500, 
     { "Content-Type": "application/json"}, JSON.stringify({"FAIL":"ERROR"})]); 
    //trying to make it fail 
    cproduct.on('request', test); 
    new ExpandProductFrom({'collection':cproduct}); 
} 

但畢竟這既不是事件被觸發。所以在看了主幹api後,我發現.on綁定事件對象。所以我代替events : {}有:

initialize : function() 
{ 
    this.on('sync',this.success); 
    this.on('error',this.fail); 
} 

本作的成功運行的功能只有當我糾正了respondWith功能。

回覆我的問題: 如何正確使用events:{}.on函數?

謝謝

回答

0

簡單的答案是...

事件:{}

這個屬性就是捕獲發生在DOM(模板)委託的事件。

如按鈕單擊事件

上()/ bind()的

這些方法是捕捉內部事件發生內部骨幹

例如,收集/模型添加事件

0

這是正確的。開箱即用,如果您在視圖中,則需要使用.on,最好是listenTo

有一些插件可以提供您正在尋找的功能,但它不在覈心。

+0

那麼問題是錯誤事件沒有被解僱,當我使它失敗 – Funonly

0

你是混淆了兩個類型的事件,讓我解釋一下:

  • Backbone.Viewevents屬性是用來聽由視圖中的DOM元素和更精確的DOM元素觸發事件$el

  • .on方法用於收聽由任何jQuery對象觸發的事件(包括Backbone.Collection

  • .listenTo方法更優選比jQuery的.on因爲它擴展,並添加更多的功能到事件模型,看看在Documentation

+0

請注意,原始海報使用的'.on()'方法是Backbone.Events上的一種方法,與jQuery無關(它自己的事件API包含一個名爲'.on()'的方法) )。 – psquared

相關問題