#javascript #backbone.js
#javascript #backbone.js
Вопрос:
У меня есть следующее в моем App.addInitializer
App.addInitializer(function () {
// Collection Map for dynamic slide-in menus
var map = {
'groups': {
'view': GroupsCollectionView,
'collection': GroupsCollection,
'title': "Choose Groups"
}
};
var menuModel = new MenuModel({
id: 'segments-are-cool',
mode: 'list'
}),
menuView = new MenuView({model: menuModel});
eventer.on('menu-open', function(type){
var collectionType = new map[type].collection,
viewType = new map[type].view({collection: collectionType}),
title = map[type].title;
menuView.model.set({type: type, title: title});
menuView.content.show(viewType);
});
App.menu.show(menuView);
});
По какой-то причине, когда я устанавливаю type
и title
в модели, при отображении моего представления они также не отображаются в соответствии с тем, что я им установил (отображается значение по умолчанию).
Я backbone.js
новичок, поэтому приношу свои извинения за мое невежество
Комментарии:
1. Для чего вы запускаете
menu-open
событиеeventer
? Это выглядело бы такeventer.trigger('menu-open', yourtype);
.2. Магистраль не присоединяет модель к представлению, это означает, что изменения в модели не отражаются в представлении. Другими словами, изначально backbone (конечно, есть плагины) не поддерживает привязку к представлению модели. Одним из быстрых решений было бы повторно отобразить представление после изменения модели.
Ответ №1:
Как объяснил coding_idiot в комментариях, Backbone (в отличие от, скажем, Angular) не обновляется автоматически View
при изменении их Model
. Хотя это немного менее удобно, это дает вам гораздо больший контроль над тем, что происходит.
В общем, большинство разработчиков Backbone (как предложил coding_idiot) просто вызывают View.render
после Model
изменений. Вы могли бы даже автоматизировать это, выполнив View
вызов this.model.listenTo('change', this.render);
внутри его initialize
метода.
В качестве альтернативы вы могли бы использовать библиотеку, подобную Epoxy (http://epoxyjs.org /) для дальнейшей автоматизации вашей привязки данных, но лично я бы не рекомендовал это только потому, что я думаю, что очень важно иметь точный контроль над тем, когда и что вы повторно отображаете.