2013-09-29 4 views
1

У меня есть следующий Backbone View:удаление модели и обновление вида в backbonejs

Chatbox.Views.Message = Backbone.View.extend({ 
    template: _.template($("#tmplt-Message").html()), 

    events: { 
     "click a.remove_link" : "clear" 
    }, 
    initialize: function() { 
     _.bindAll(this, 'render', 'remove'); 
     this.model.on('clear', this.clear); 
     this.listenTo(this.model, 'destroy', this.remove); 
    }, 

    render: function() { 
     return $(this.el).append(this.template(this.model.toJSON())) ; 
    }, 

    clear: function() { 
     this.model.destroy(); 
    } 
}); 

Когда я нажимаю на ссылку с классом remove_link функция clear() называется правильно и destroy() выполняется.

Как я могу позвонить clear() извне, в моем случае у меня есть коллекция, и я хочу удалить модель в этой коллекции. В настоящее время я пытаюсь сделать это:

message = Chatbox.ChatLogCollection.where({ hash: hash}); 
    message.clear(); 
    Chatbox.ChatLogCollection.remove(message); 

Но я получаю: TypeError: message.clear не является функцией

Как я могу позвонить clear() удалить модель с точки зрения?

ответ

1

Если ваша первая строка ищет модель в коллекции, clear() не будет работать, потому что clear() ассоциируется с представлением, а не с моделью, но вы вызываете ее в модели. Если это модель, вы можете напрямую использовать collectionInstance.remove(message) или message.destroy(). Тем не менее, вам потребуется просмотр, чтобы прослушать удаляемую модель, чтобы повторное отображение было просмотрено.

Чтобы проверить, добавьте console.log(message), чтобы узнать, что вы получаете.

+0

Когда я пытаюсь 'message.remove()' Я получаю 'message.remove не функция '. И как я могу привязать представление к прослушиванию изменений? – redshark1802

+0

'this.model.on ('remove', this.render, this);' Is Chatbox.ChatLogCollection - объект коллекции или экземпляр объекта коллекции? – EmptyArsenal

+0

Это экземпляр объекта коллекции – redshark1802

Смежные вопросы