BackboneJS - кэширование экземпляров представления - PullRequest
3 голосов
/ 05 мая 2011

Я пишу приложение BackboneJS, где каждая из шести вкладок представлена ​​своими представлениями. Должен ли я сохранять экземпляр представления и просто вызывать его функцию render() всякий раз, когда пользователь нажимает на вкладку, на которой он уже был? Или создать новый экземпляр и получить доступ к шаблону, который jQuery кэшировал для меня при первом рендеринге?

Если я сделаю последнее, мне все равно нужно будет убедиться, что другая коллекция не извлекается через мой JSON API, поскольку это делается во время инициализации некоторых представлений.

Сейчас я храню все экземпляры вида в моем контроллере, но мне было интересно, встроен ли он как-то или есть лучшие альтернативы.

Приветствие.

Обновление: вот моя loadCachedView функция, которую я использую в своем контроллере:

loadCachedView: function (name, view, collection){
    if (!this.views[name]){
        if (collection){
            this.collections[name] = new collection();
        }
        this.views[name] = new view({collection: this.collections[name]});
    } else {
        this.views[name].render();
    }
},

Итак, при рендеринге вида я просто иду: this.loadCachedView('settings', SettingsView, SettingsCollcetion).

Ответы [ 2 ]

3 голосов
/ 06 мая 2011

Я обычно отслеживаю все свои виды в моем контроллере. Затем контроллер переключается между доступными представлениями на основе событий навигации:

var Switches;
Switches = [];
Skepic.SwitchView = Backbone.View.extend({
    hide: function() {
        return this.el.detach();
    },
    show: function() {
        if (!_.include(Switches, this)) {
            Switches.push(this);
        }
        _.each(Switches, function(s) {
            return s.hide();
        });
        this.container().append(this.el);
        return $('html, body').animate({
            scrollTop: 0
        }, 'fast', "linear");
    },
    container: function() {
        if (this.options.container) {
            return this.options.container;
        } else {
            return $("body > .content");
        }
    }
});

Это вид базового вида для переключения между одним видом и другим. Контроллер создаст представление (выбирая данные по мере необходимости), и когда вы переключаетесь, вы можете выполнить последние проверки в переопределенной функции show () в представлении.

(обратите внимание, что я использую detach на jQuery, чтобы делегирование событий все еще работало)

1 голос
/ 05 мая 2011

Не могли бы вы использовать здесь функцию .memoize?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...