Backbone Marionette,Composite View初始化两次

Tho*_*ham 8 jquery backbone.js backbone-views marionette

我正在使用一个复合视图,其中$ .dialog调用了它的$ el.

然后,合成视图将列出集合中的项目.

现在我已经尝试了多种方式来渲染集合项:从复合视图外部获取它,然后将其附加到视图中,在视图内部获取,从我的服务器脚本预加载集合等等...

一切似乎都有效,但同样的问题发生..

一旦复合视图看到这个集合,它就会再次调用它自己的初始化函数......

我完全理解渲染函数将在集合重置或添加时调用...但是初始化??? 我完全不知道为什么会这样.

showCustomFieldSelect: function(e){

    log('triggered');

    e.preventDefault();

    var cl = new AustApp.Collections.CustomField;

    var select = new AustApp.Views.AvailableCustomFieldsList({
        el: "#available-custom-fields-popup",
        collection: cl
    });

    cl.fetch();


    cl.once("reset", function(){
        // this bind was
        // previously used for creating the view
        // or calling render functions directly
        // amongst numerous efforts to debug

    }, this);


},



MyApp.Views.AvailableCustomFieldsList = function(){

var AvailableCustomFieldsList = Backbone.Marionette.CompositeView.extend({

    template: "#available-contact-list-custom-field-list-js",

    tag: "div",

    itemView: AustApp.Views.AvailableCustomFieldsListItem,

    emptyView: AustApp.Views.EmptyAvailableCustomFieldsListItem,

    itemViewContainer: "ul",

    templateHelpers: viewHelpers,

    initialize: function(){
        log('init called'); // called twice?????
        this.render();
        this.$el.dialog({
            title: "Available Custom Fields",
            width: '600px',
            modal: true,
            dialogClass: "round",
        });
    },
    /* stuff */
});

return AvailableCustomFieldsList;
}();
Run Code Online (Sandbox Code Playgroud)

任何帮助,因为我很沮丧

sim*_*olo 18

对我来说,这是固定的,但在确认(几个小时敲打我的表头后)ItemView之前宣布CompositeView!

作品:

MyItemView = Marionette.ItemView.extend({ /* STUFF */ })
MyCompView = Marionette.CompositeView.extend({ itemView: MyItemView })
Run Code Online (Sandbox Code Playgroud)

不起作用(init没有任何参数调用两次):

MyCompView = Marionette.CompositeView.extend({ itemView: MyItemView })
MyItemView = Marionette.ItemView.extend({ /* STUFF */ })
Run Code Online (Sandbox Code Playgroud)

即使我们在声明两者之后获得MyCompView的实例也没关系,必须在compsite视图之前声明itemView.


Tho*_*ham 7

所以我把问题缩小到在复合视图之后声明项目视图的时候,复合视图也包含在另一个复合视图中.

将嵌套的复合视图更改为项视图可以解决问题,但是...将嵌套的复合视图更改为集合视图会发生错误,即集合的itemView不可用

所以将嵌套视图的声明移动到集合视图的声明之上就修复了它......然后改变它,发现嵌套的复合视图在声明的顺序正确时起作用.

我认为这应该不那么具有误导性,因为复合视图的双初始化只是简单的混淆,并且应该吐出关于未定义的项目视图的错误,而不是如果可能的话,那就是^ ^ ^

谢谢