如何使用Backbone.Marionette处理嵌套CompositeView中?(How to

2019-07-04 04:15发布

我进入与主干网大规模数据结构,和整个场合的数据将通过CompositeViews很好的体现未来; 即,通过加入“补充绒毛”它们周围CollectionViews,如文件头,按钮等。

然而,我在里面彼此有很多困难嵌套CompositeViews的。 在CompositeView中的使用标准ItemView控件属性来呈现另一个CompositeView中似乎并没有在所有射击。

假设我有一个父ItemView控件 ,实例化为例如(以下德里克贝利的例子 ;假设这顶层是其中的初始fetch()在收集将被称为):

var User = Backbone.Model.extend({});

var UserCollection = Backbone.Collection.extend({
    model: User
});

var userList = new UserCollection(userData);

var schedulerCompositeView = new SchedulerCompositeView({
    collection: userList
});

schedulerCompositeView.render();

this.ui.schedulerWidget.html(schedulerCompositeView.el);

SchedulerCompositeView看起来这样的:

return Backbone.Marionette.CompositeView.extend({
    template: Handlebars.compile(schedulerCompositeViewTemplate),
    itemView: SchedulerDetailCompositeView,
    appendHtml: function (collectionView, itemView) {
        collectionView.$("#schedulerGroups").append(itemView.el);
    }
});

最后,SchedulerDetailCompositeView:

return Backbone.Marionette.CompositeView.extend({
    template: Handlebars.compile(schedulerDetailCompositeViewTemplate),
    itemView: SchedulerDetailItemView,
    appendHtml: function (collectionView, itemView) {
        collectionView.$("#schedulerDetailStops").append(itemView.el);
    }
});

SchedulerDetailCompositeView永远不会被实例化; 事实上,它的appendHtml()方法似乎从来没有在各消防。

显然,还有一些其他的信息在这里失踪; 显然意图是一家集/模型传递到SchedulerDetailCompositeView,但我真的不知道什么这样做,由于嵌套CompositeViews正确的技术。

作为参考,这里是我想要实现结构的粗略样机; 如果有可能是实现这一目标比嵌套CompositeViews一个更好的方式,我当然所有的耳朵:

http://jsfiddle.net/KAWB8/

Answer 1:

找到了! 我是经deven98602正确的路径设置。

要记住的关键是,如果你嵌套多个CompositeViews(或CollectionViews),每个级联级下调将代表组从其父的一个单元; 也就是说,从我的前代表SchedulerDetailCompositeViewSchedulerCompositeView收集的单一模式。 因此,如果我构建嵌套CompositeViews(大概是基于深度嵌套的数据),我必须重新定义这些级联子对象的集合,因为他们只有一个与之关联的单一模式,而不是一个适当的集合来呈现。

这就是说,在更新SchedulerDetailCompositeView看起来这样的:

return Backbone.Marionette.CompositeView.extend({
    template: Handlebars.compile(schedulerDetailCompositeViewTemplate),
    itemView: SchedulerDetailItemView,
    initialize: function () {
        var Load = Backbone.Model.extend();

        var LoadCollection = Backbone.Collection.extend({
            model: Load
        });

        // this array of loads, nested within my JSON data, represents
        //  a new collection to be rendered as models using SchedulerDetailItemView
        var loadList = new LoadCollection(this.model.get("loads"));

        this.collection = loadList;
    },
    appendHtml: function (collectionView, itemView) {
        collectionView.$("#schedulerDetailStops").append(itemView.el);
    }
});

一旦收集设置, appendHtml()触发如预期,并呈现每款新车型这个新设置的收藏。



文章来源: How to handle nested CompositeView using Backbone.Marionette?