【发布时间】:2014-06-25 00:51:32
【问题描述】:
如果您不想看到完整的代码,这就是我想要做的。 我有多个页面,每个页面都有多个标签。有一个名为 PageManyView 的复合视图用于渲染页面,称为它的 childView PageView。 Page View 是一个嵌套的复合视图,它呈现标签,将 this.model.get('tags') 作为集合传递。
现在我可以使用 pages.add(newPage) 轻松添加新页面。这里的页面是集合。 我在添加新标签时遇到问题。我怎样才能做到这一点。请帮忙。
代码
var PageModel = Backbone.Model.extend({});
var PageCollection = Backbone.Collection.extend({
model: PageModel
});
我在 /data 端点的 JSON 是这样来的
[
{
_id: '1', 'name': '1', info: 'Page 1',
tags: [{name:'main', color:'red'}, {name:'page', color:'blue'}]
},
{
_id: '1', 'name': '2', info: 'Page 2',
tags: [{name:'section', color:'blue'} {name:'about', color:'yellow'}]
}
]
我在 Marionette 中创建了这样的嵌套视图:
TagView = Marionette.ItemView.extend({
template: '#tagOneTemplate'
});
PageView = Marionette.CompositeView.extend({
template: '#pagesTemplate',
childViewContainer: 'div.tags',
childView: EntityViews.TagView,
initialize: function(){
var tags = this.model.get('tags');
this.collection = new Backbone.Collection(tags);
}
});
PageManyView = Marionette.CompositeView.extend({
template: '#pageManyTemplate',
childView: EntityViews.PageView,
childViewContainer: 'div#all-pages'
});
现在这是我面临问题的地方。在我的应用程序的 Controller 中,假设我是否必须添加一个新页面
showPages: function(){
//Getting pages by using jQuery deferred
var view = PageMainView({collection:pages});
view.on("add:page", function(){
var newPage = Page({_id: 3});
pages.add(newPage);
});
}
现在这个添加函数会自动呈现新页面。
但我在添加新标签时遇到了问题。如何添加新标签?
【问题讨论】:
-
你的
PageView应该监听模型的变化并重置它的标签集合。然后,您可以轻松地将新标签添加到页面集中的任何模型中。
标签: backbone.js marionette backbone-views backbone-events