Javascript 模板中要引用的主干集合变量
有没有一种方法可以使用Backbone.js/Marionette来使用类似于在模型中使用但在集合中使用的变体?例如: 在MyCollection.js中: 然后在MyModel.js中: 在template.ejs中:Javascript 模板中要引用的主干集合变量,javascript,backbone.js,ecmascript-6,marionette,Javascript,Backbone.js,Ecmascript 6,Marionette,有没有一种方法可以使用Backbone.js/Marionette来使用类似于在模型中使用但在集合中使用的变体?例如: 在MyCollection.js中: 然后在MyModel.js中: 在template.ejs中: 我似乎得到了TypeError:无法读取未定义错误的属性“foo”,所以我想知道这是否可能,或者是否有其他方法?我希望避免将MyCollection.foo逻辑移动到模板中,但这似乎是最简单的方法。首先,变异子不是主干或木偶的一部分。看起来你正在使用插件。它应该用于模型而不是集
我似乎得到了TypeError:无法读取未定义错误的属性“foo”,所以我想知道这是否可能,或者是否有其他方法?我希望避免将MyCollection.foo逻辑移动到模板中,但这似乎是最简单的方法。首先,变异子不是主干或木偶的一部分。看起来你正在使用插件。它应该用于模型而不是集合 你的代码有很多问题。首先,以下代码无效
foo: {
if (this.models.length)
return this.models[0].get('foo');
return "default value";
}
其次,您尝试从集合和模型的构造函数访问属性。
您应该使用数据创建它们的实例,并从集合实例的“模型”属性访问模型实例
<div>
<h1><%= myCollection.foo %></h1>
<% for (var myModel of myCollection.models) { %>
<span><%= myModel.get("foo") %></span>
<% } %>
</div>
我怀疑他们是否与collection一起工作,因为我在文档中没有看到任何与collection相关的示例
请阅读您正在使用的插件和框架的文档,并尝试了解您正在做什么…插件似乎不支持集合。似乎最简单的替代方法是只向木偶视图的serializeData方法添加一个对象,即:
在这里,甚至不需要使用Mutators,foo只是MyCollection中的一个函数。您需要有视图来处理模板和渲染。 Marionette有一个CollectionView api,这可能是您正在寻找的, 引用文件: CollectionView将在中的所有模型中循环 指定的集合,使用指定的子视图呈现每个集合, 然后将子视图el的结果附加到集合中 景色很美。默认情况下,CollectionView将维护一个已排序的 集合在DOM中的顺序。此行为可以通过以下方式禁用: 在初始化时指定{sort:false}
感谢您的澄清,我在尝试转换和概括我的代码时犯了一些错误。我的印象是Mutators是一个默认的插件,但我对主干网/木偶网和我正在使用的代码库还是相当陌生的。您是对的,在集合中提供了一些带有变体的示例。@Tom和另外一件事,我认为myModel.foo应该是下划线模板中的myModel.getfoo
<div>
<h1><%= myCollection.foo %></h1>
<% for (var myModel of myCollection) { %>
<span><%= myModel.foo %></span>
<% } %>
</div>
foo: {
if (this.models.length)
return this.models[0].get('foo');
return "default value";
}
<div>
<h1><%= myCollection.foo %></h1>
<% for (var myModel of myCollection.models) { %>
<span><%= myModel.get("foo") %></span>
<% } %>
</div>
serializeData: function() {
return { models: this.collection.models, foo: this.collection.foo().toJSON() };
}