我开始学习Marionette.View
概念。为此我创建了具有1个属性的模型并指定了默认值。
我的html文件中有下拉列表。每当它发生变化时,它会触发一个函数名myfunction
。在myFunction
内部我改变了模型属性值。
每当属性值自动更改时,它会触发另一个函数。我在Marionette.CompositeView
内写的那个事件。但是它没有工作。
之前我使用myModel.on
做了同样的事情,但它工作得很好。但它在modelEvents
中无效Marionette.CompositeView
。
让我们检查以下代码。
var mymodel=Backbone.Model.extend({
defaults:{
"name":"oldValue"
}
});
var mymodelObj=new mymodel();
//marionette.View code
var backView=Backbone.Marionette.CompositeView.extend({
events:{
"change #pop1":"myFunction"
},
myFunction:function(){
mymodelObj.set({name:"updatedValue"})
},
modelEvents:{
"change:name":"myFunction1"
},
myFunction1:function(){
alert("Hi");
}
});
//creating instance
var backViewObj=new backView({el:$("#sidebar")});
我该如何解决这个问题。
现在我正在尝试了解Marionette.js
在我的Backbone应用程序中的用途。
答案 0 :(得分:0)
如果我没弄错,模型不会附加到您创建的视图中。对于要触发的modelEvents,CompositeView中应该有一个model属性。为此,您应该在初始化CompositeView期间指定模型;
var backViewObj=new backView({el:$("#sidebar"), model : mymodelObj});
答案 1 :(得分:0)
要做到这一点,虽然您需要在创建backView
时传递模型,如下所示:
var backViewObj = new backView({ el:$("#sidebar"), model: myModel });
Marionette通过覆盖delegateEvents
来完成此操作,Backbone.View
调用其构造函数并将modelEvents
对象委托给模型:
Marionette.bindEntityEvents(this, this.model, Marionette.getOption(this, "modelEvents"));
根据您上面的评论,我认为您不清楚Backbone.Marionette在询问如何传递更多模型实例时提供的不同类型的视图。当我开始使用木偶时我也不清楚。
Marionette.ItemView
代表单一型号。
Marionette.CollectionView
代表一个集合,并为集合中的每个模型呈现Marionette.ItemView
。它无法渲染模板。
Marionette.CompositeView
表示模型和集合(树结构中的叶和分支)。这适用于递归数据结构,尽管您可以使用CompositeView来呈现模板(如表头等),并使用itemViewContainer
将itemView放在特定元素中。
如果您希望CompositeView能够渲染多个模型,则需要将模型集合传递给CompositeView而不是单个模型: