Коллекция Backbone -При фильтрации и отображении коллекции теряется ссылка на исходную нефильтрованную коллекцию

I я настраиваю приложение, управляемое Backbone. Я столкнулся с проблемой «должно-быть-просто», когда у меня есть модель под названием «Message», коллекция под названием «MessageList» и представления под названием «MessageView " и "MessageListView".

Код MessageListView отображает MessageList. У меня есть 4 переключателя, которые фильтруют то, что показывает MessageListView. Кнопки фильтра: "Все", "Активно", "Помечено" и "Игнорируется". " Все» — это первоначальный фильтр при загрузке страницы. Когда пользователь нажимает фильтр «Помечено», должны отображаться только сообщения с флагом == 1. При повторном нажатии «Все» все сообщения должны отображаться снова.

Проблема, с которой я сталкиваюсь, и проблема в моем дизайне заключается в том, что когда я фильтрую Коллекцию на основе filterString, ссылка на исходную всю Коллекцию теряется Итак, когда «Все» снова нажимается n, Сообщения потеряны.

Мне интересно, как это лучше всего сделать в Backbone...

Вот код установки...

    var messageListView = new MessageListView({collection: messageList});

Вот код MessageListView...

MessageListView = Backbone.View.extend({

    initialize : function() {

        this.collection.on("add", function(model) {
            var view = new MessageView({model: model});
            $("div.cameras").prepend(view.render().el);
        });

        this.collection.on("remove", function(model) {
            var ID = model.id;
            $("#message-" + ID).parent("div.message").remove();
        });

        this.collection.on("reset", function(models) {
            $("div.cameras").empty();
            models.each(function(message) {
                var view = new MessageView({model: message});
                $("div.cameras").prepend(view.render().el);
            });
        });

    },

    filterMessages : function(filterString) {
        var filtered = this.collection.filter(function(model){

            if (filterString == "all")
            {
                return true;
            }
            else if (filterString == "active")
            {
                return model.get("ignore") == "0";
            }
            else if (filterString == "ignore")
            {
                return model.get("ignore") == "1";
            }
            else if (filterString == "flag")
            {
                return model.get("flag") == true;
            }

        });
        this.collection.reset(filtered);
    },
6
задан mu is too short 2 May 2012 в 23:40
поделиться