我有一个Backbone应用程序正在运行并且正常使用requirejs。现在,我正在尝试迁移到Marionette,以便更好地组织代码。
我只是想从一个区域的集合中显示一个模型,在另一个区域中有两个按钮。我想从该系列转到下一个或上一个型号。并改变其对模型区域的看法。
但我不知道如何迭代集合并将其模型发送到视图。
jsfiddle在这种情况下使用了一些简化的代码。
HTML:
<div class="player"></div>
<script id="layout-template" type="text/template">
<div class="modelView"></div>
<div class="controls"></div>
</script>
<script id="model-region" type="text/template">
<%=name%>
</script>
<script id="control-region" type="text/template">
<button id="prev">Prev</button>
<button id="next">Next</button>
</script>
答案 0 :(得分:1)
如果我理解您的问题,那么您正尝试在同一布局上协调两个视图之间的事件。在这种情况下,我建议设置一个Controller。
然后,您可以在控件视图中注册视图triggers:
ControlsView = Backbone.Marionette.ItemView.extend({
// ...
triggers: {
"click #previous": "control:previous",
"click #next": "control:next"
}
});
然后在控制器中,您将实例化视图并为controlView触发器设置处理程序以更新modelView。
var Router = Marionette.AppRouter.extend({
appRoutes: {
"/": "start",
"/:index" : "showModel"
},
});
var Controller = Marionette.Controller.extend({
initialize: function(){
var self = this;
this.controlsView = new ControlsView();
this.modelView = new MainView();
this.myCollection = new MyCollection();
this.myIndex = 0;
this.myCollection.fetch().then(function(){
self.myIndex = 0;
});
this._registerTriggers();
},
start: function(){
this.controlLayout.show(this.controlView);
this.showModel();
},
showModel: function(index){
index = index || this.index;
this.modelView.model = myCollection.at(this.index);
this.modelLayout.show(this.modelView);
},
showNext: function(){
var max = this.myCollection.models.length;
this.index = max ? 1 : this.index + 1;
this.showModel();
},
showPrevious: function(){
var max = this.myCollection.models.length;
this.index = 0 ? max : this.index - 1;
this.showModel();
},
_registerTriggers: function(){
this.controlsView.on("control:next", this.showNext());
this.controlsView.on("control:previous", this.showPrevious());
}
}
var controller = new Controller();
var router = new Router({
controller: Mod.controller
});
controller.start();
使用此方法可以分离视图和集合。这将使您的代码可重用(使用不同上下文中的控件视图作为示例)。
答案 1 :(得分:0)
您正在寻找CollectionView或CompositeView。
CollectionView
将循环遍历所有模型
指定的集合,使用指定的itemView
渲染每个集合,
然后将项目视图的el
的结果附加到集合视图中
el
。
CompositeView
从CollectionView
延伸以用作。{1}}
复合视图,用于表示两者的场景
树形结构中的分支和叶子,或者用于场景的场景
集合需要在包装器模板中呈现。