0

我开始学习Marionette.View概念。为此,我创建了具有 1 个属性的模型并分配了默认值。

我的 html 文件中有下拉列表。每当它发生变化时,它都会触发一个函数名称作为myfunction.InsidemyFunction我更改了模型属性值。

每当属性值自动更改时,它都会触发另一个函数。我在里面写Marionette.CompositeView的那个事件。但它不起作用。

早些时候我在那里做了同样的事情myModel.on,它工作正常。但它不能modelEventsMarionette.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我的主干应用程序在哪里有用。

4

2 回答 2

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。


Marionette.ItemView表示单个模型。

Marionette.CollectionView表示一个集合并为集合中的每个模型呈现一个Marionette.ItemView。它没有呈现模板的能力。

Marionette.CompositeView表示模型和集合(树结构中的叶子和分支)。这适用于递归数据结构,尽管您可以使用 CompositeView 来呈现模板(如表头等)并用于itemViewContainer将 itemViews 放置在特定元素中。

如果您希望您的 CompositeView 能够呈现多个模型,您需要将一组模型传递给 CompositeView 而不是一个模型:

于 2013-11-05T18:41:15.647 回答
0

如果我没记错的话,模型没有附加到您创建的视图上。对于要触发的模型事件,CompositeView 中应该有一个模型属性。为此,您应该在 CompositeView 初始化期间指定模型;

var backViewObj=new backView({el:$("#sidebar"), model : mymodelObj});
于 2013-11-05T08:08:12.773 回答