【发布时间】:2014-07-11 14:35:01
【问题描述】:
我正在尝试使用Marionette.CollectionView 和Marionette.ItemView 实现面包屑导航。我想从模块的任何部分将面包屑添加到列表中。
这是我写的模块:
App.module("BreadcrumbModule", function(BreadcrumbModule){
var instance;
var Breadcrumb = Backbone.Model.extend({
defaults:{
link : '',
name : ''
}
});
BreadcrumbModule.BreadcrumbList = Backbone.Collection.extend({
model : Breadcrumb
});
var BreadcrumbView = Marionette.ItemView.extend({
tagName : 'li',
render : function() {
var liData = '';
if(this.model.get('link') == '#') {
liData = 'You are here: ';
} else {
liData = '<a href="#' + this.model.get('link') + '" class="tabSection">' + this.model.get('name') + '</a>';
}
$(this.el).html(liData);
return this;
}
});
BreadcrumbModule.BreadcrumbListView = Marionette.CollectionView.extend({
tagName: "ul",
id: "Breadcrumb",
itemView: BreadcrumbView,
initialize : function() {
this.collection = new BreadcrumbModule.BreadcrumbList();
this.collection.bind('add', this.appendBreadcrumb);
//this.collection.add({link: '#', name: 'You are here : '});
this.listenTo(this.collection, "add", this.appendBreadcrumb);
},
addBradcrumb: function(breadcrumbList){
breadcrumbList.forEach(function(breadcrumb) {
//console.log(breadcrumb);
this.collection.add(breadcrumb);
}, this);
},
appendBreadcrumb: function(breadcrumb) {
var breadcrumbView = new BreadcrumbView({
model : breadcrumb
});
$(this.el).append(breadcrumbView.render().el);
}
});
// Singleton
BreadcrumbModule.getInstance = function() {
if(!BreadcrumbModule.instance) {
instance = new BreadcrumbModule.BreadcrumbListView();
}
return instance;
}
});
我访问此模块的计划如下:
//var breadcrumbs = [];
//breadcrumbs.push({link: 'book', name: 'Book'});
//var breadcrumbListView = App.BreadcrumbModule.getInstance();
var breadcrumb = new App.BreadcrumbModule.Breadcrumb({link: '#', name: 'You are here: '});
var breadcrumbList = new App.BreadcrumbModule.BreadcrumbList();
breadcrumbList.add(breadcrumb);
breadcrumbListView.addBradcrumb(breadcrumbs);
我可以看到默认的显示(“你在这里:”),当我添加新的面包屑时,“收藏”正在增长,但它没有反映在视图中。
可能是什么原因?
我该如何解决?
谢谢!
//圣。
【问题讨论】:
-
您使用额外数组 (
breadcrumbs) 的任何原因,然后您将其传递给 CollectionView 上的方法,而不是仅仅向集合本身添加新模型?您的 CollectionView 应该只是listenTo集合更改并重新渲染。 -
我是 Backbone 的新手。我没有任何具体的理由来添加额外的数组,可能是我理解错了。我刚刚尝试了您在此处提到的内容,但没有奏效,可能我需要进行更多修改。我是否遵循正确的编码结构?你有任何工作样本吗?