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 使用主干网在CompositeView上渲染事件后。木偶_Backbone.js_Marionette - Fatal编程技术网

Backbone.js 使用主干网在CompositeView上渲染事件后。木偶

Backbone.js 使用主干网在CompositeView上渲染事件后。木偶,backbone.js,marionette,Backbone.js,Marionette,我有一个带搜索面板和结果数据收集的木偶合成视图 我想在以下情况下调用函数: 此时将呈现搜索面板 集合尚未呈现 呈现集合时不应调用此函数 我是这样做的:(但是“afterRender”函数被调用了两次) 我该怎么做 =====================================编辑================================== 我是这样解决的,如果你有什么意见,请告诉我 // VIEW App.MyComposite.View = Backbone.Mario

我有一个带搜索面板和结果数据收集的木偶合成视图

我想在以下情况下调用函数:

  • 此时将呈现搜索面板
  • 集合尚未呈现
  • 呈现集合时不应调用此函数
我是这样做的:(但是“afterRender”函数被调用了两次)

我该怎么做

=====================================编辑==================================

我是这样解决的,如果你有什么意见,请告诉我

// VIEW
App.MyComposite.View = Backbone.Marionette.CompositeView.extend({

    //INITIALIZE
    initialize: function() {        
        //this.bindTo(this,'render',this.afterRender);
        this.firstRender = true;
    },

    onRender: function () {
        if (firstRender) {
            //DO STUFF HERE..............
            this.firstRender = false;         

        }
    }

});

木偶网提供了一个内置于其所有视图中的
onRender
方法,因此您可以摆脱
this.bindTo(this'render',this.afterRender)
调用:


// VIEW
App.MyComposite.View = Backbone.Marionette.CompositeView.extend({
    // TEMPLATE
    template: Handlebars.compile(templates.find('#composite-template').html()),
    // ITEM VIEW
    itemView: App.Item.View,
    // ITEM VIEW CONTAINER
    itemViewContainer: '#collection-block',

    //INITIALIZE
    initialize: function() {        
        // this.bindTo(this,'render',this.afterRender); // <-- not needed
    },

    onRender: function () {
        // do stuff after it renders, here
    }

});
但是,如果您有一些需要运行的特殊代码,并执行此选项未涵盖的某些操作,那么您必须加入一些自己的逻辑


CompositeView.extend({

  onRender: function(){
    if (this.collection && this.collection.length === 0) {
      // do stuff here because the collection was not rendered
    }
  }

});

只需使用
onShow
功能

Backbone.Marionette.ItemView.extend({
  onShow: function(){
    // react to when a view has been shown
  }
});

请提供有关事件绑定以及何时在初始化函数中调用render的更多详细信息:“this.bindTo(this,'render',this.afterRender)”。我不确定这是否正确,但我想做的是在渲染视图后调用“afterRender”函数谢谢你的回答。可能应该将“this.collection.length>0”更改为“this.collection.length==0”

CompositeView.extend({

  onRender: function(){
    if (this.collection && this.collection.length === 0) {
      // do stuff here because the collection was not rendered
    }
  }

});
Backbone.Marionette.ItemView.extend({
  onShow: function(){
    // react to when a view has been shown
  }
});