Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/425.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 模板中要引用的主干集合变量_Javascript_Backbone.js_Ecmascript 6_Marionette - Fatal编程技术网

Javascript 模板中要引用的主干集合变量

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逻辑移动到模板中,但这似乎是最简单的方法。首先,变异子不是主干或木偶的一部分。看起来你正在使用插件。它应该用于模型而不是集

有没有一种方法可以使用Backbone.js/Marionette来使用类似于在模型中使用但在集合中使用的变体?例如:

在MyCollection.js中:

然后在MyModel.js中:

在template.ejs中:


我似乎得到了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() };
}