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

How can I detach an event listener from cloned collection?

我正在研究集合中的搜索模型。 为了防止在我进行的所有查询中获取集合 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 之类的东西?

Backbone 为我们提供了一个函数 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);
},