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
Backbone.js 使用主干呈现嵌套集合。木偶和主干。关系_Backbone.js_Marionette_Backbone Relational - Fatal编程技术网

Backbone.js 使用主干呈现嵌套集合。木偶和主干。关系

Backbone.js 使用主干呈现嵌套集合。木偶和主干。关系,backbone.js,marionette,backbone-relational,Backbone.js,Marionette,Backbone Relational,我正在尝试使用Backbone.js制作一个简单的日历/待办事项列表 我收集了一些天,每个天可以有多个待办事项。 我想将每个日期呈现为一个无序列表,其中包含一个无序的待办事项列表。这是我的HTML: <ul id="days-list"> <!-- #day-tpl --> </ul> <script id="day-tpl" type="tpl"> <h1>To-do for {{name}}</h1>

我正在尝试使用Backbone.js制作一个简单的日历/待办事项列表

我收集了一些天,每个天可以有多个待办事项。 我想将每个日期呈现为一个无序列表,其中包含一个无序的待办事项列表。这是我的HTML:

<ul id="days-list">
    <!-- #day-tpl -->
</ul>

<script id="day-tpl" type="tpl">
    <h1>To-do for {{name}}</h1>
    <ul class="todos-list">
        <!-- todo-tpl -->
    </ul>
</script>

<script id="todo-tpl" type="tpl">
    {{title}}
</script>
Day集合显示得很好(多亏了木偶!),但我不知道如何渲染每天的Todo集合。有什么想法吗?谢谢

编辑:我找到了一种方法,但我不确定这是正确的方法

我对我的DayView进行了如下编辑:

DayView = Backbone.Marionette.ItemView.extend({
    tagName: 'li',
    template: '#day-tpl',
    onRender: function(){
        var $todosList = this.$el.find('.todos-list');
        var todos = new Todos(this.model.get('todos').toJSON());
        var todosView = new TodosView({collection: todos, el: $todosList});
        todosView.render();
    }
});

它确实在正确的日期正确地呈现每个todo,但是使用jquery find和toJSON是一种代码味道。

Marionette有一个CompositeView,它最适合嵌套集合。我已经包括了文档和一篇讨论如何使用它的文章

DayView = Backbone.Marionette.ItemView.extend({
    tagName: 'li',
    template: '#day-tpl',
    onRender: function(){
        var $todosList = this.$el.find('.todos-list');
        var todos = new Todos(this.model.get('todos').toJSON());
        var todosView = new TodosView({collection: todos, el: $todosList});
        todosView.render();
    }
});