2012-06-26 2 views
4

Я новичок в Backbone, и я еще не совсем понял его, и я столкнулся с ситуацией, в которой я не могу найти документацию. Что я, если у меня есть представление, которое содержит несколько просмотров? Например, у меня есть вид, называемый StackView. Цель этого взгляда - аккуратно выложить набор карточек. Он управляет анимацией добавления, удаления и настройки карт в стеке. Каждая карта - CardView. Как бы я справился с этим? Я видел, как люди говорили о представлениях в представлениях, просто создавая переменную в представлении и назначая экземпляр View этой переменной. Должен ли я просто добавлять массив из CardView s в переменную StackView?Как обрабатывать несколько видов в одном представлении с помощью backbonejs

ответ

1

Это то, что я делаю, и оно работает хорошо. Вот фрагмент View I, который я использую в приложении. Я переписал его обратно в обычную JavaScript из моего CoffeeScript, поэтому прошу прощения за любые опечатки:

render: function() { 
    var _this = this; 
    this.$el.html(this.template()); 

    this.listItemViews = []; 

    // for each model in the collection, create a new sub-view and add 
    // it to the parent view 
    this.collection.each(function(model){ 
    var view = new App.Views.Projects.ListItem({model:model}); // create the new sub-view 
    _this.listItemViews.push(view); // add it to the array 
    _this.$('#project-table tbody').append(view.render().$el); // append its rendered element to the parent view's DOM 
    }); 
    return this; 
} 

Это позволяет моему Табличные сохранить ссылку на все listItemView взглядов.

Конечно, если вы сделаете это, вы должны правильно удалить эти дочерние представления и отменить любые события при удалении родительского представления.

+1

Два предложения: (1) не использовать 'var self', использовать что-то еще (например,' _this') или аргумент 'context' для [' _.each'] (http: //documentcloud.github .com/underscore/# each), ['window.self'] (https://developer.mozilla.org/en/DOM/window.self) всегда вокруг, поэтому' self' может вызвать путаницу (да, я узнал это трудный путь); (2) коллекции имеют некоторые методы [Underscore mixed] (http://documentcloud.github.com/backbone/#Collection-Underscore-Methods), поэтому 'this.collection.each (function (model) {...}) 'работает. –

+0

спасибо; хорошая вещь. я буду обновлять свой код (и этот ответ) соответственно – jackwanders

+0

wait a sec. поэтому у меня есть множество представлений. Я отобразил их на странице. мой родительский класс 'Stack' должен иметь возможность вызывать функцию в subview при щелчке по элементу подзаголовка. Как я могу это сделать? Вот сценарий: класс 'CardView' имеет функцию' showActionMode() '. Эта функция будет работать только при действии actionModeEnabled. Он недействителен, пока вы не нажмете на него в стеке, и в этом случае стек должен разместить границу фокусировки на элементе и вызвать метод enableActionMode. – LordZardeck

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