如何从克隆集合中分离事件监听器?

时间:2018-11-20 17:53:20

标签: javascript backbone.js

我正在研究馆藏内的搜索模型。 为了防止在所有查询中都获取集合,我进行了collection.clone()

var filteredContacts = contactsCollection.clone();
filteredContacts.reset(filteredContacts.filter(function(contact) {
   if(contact.get("login"))
        return contact.get("login").search(new RegExp(Value, "i")) >= 0;
    else
        return false;
}));
filteredContacts.each(function(contact) {
    new ContactView( { model: contact } );
});

contactsCollection中也有listenTo

initialize: function() {
    this.listenTo(Backbone, "contacts:open", this.getContacts);
},

从服务器获取联系人。 因此,当我尝试触发此事件时,这两个集合都会捕获此事件。

我怎么称呼像collection.destory这样的东西?

1 个答案:

答案 0 :(得分:0)

主干为我们提供了功能stopListening()。该方法实际上告诉对象停止侦听事件。 在您的情况下,我们可以像这样

var filteredContacts = contactsCollection.clone();
filteredContacts.reset(filteredContacts.filter(function(contact) {
   if(contact.get("login"))
        return contact.get("login").search(new RegExp(Value, "i")) >= 0;
    else
        return false;
}));
filteredContacts.stopListening("contacts:open");
filteredContacts.each(function(contact) {
    new ContactView( { model: contact } );
});

contactsCollection中甚至有如下的listenTo

initialize: function() {
    this.listenTo(Backbone, "contacts:open", this.getContacts);
},