Backbone.js 当集合项显示在页面上时的主干回调还是木偶回调? 问题:

Backbone.js 当集合项显示在页面上时的主干回调还是木偶回调? 问题:,backbone.js,google-visualization,marionette,Backbone.js,Google Visualization,Marionette,只有在主干或木偶收集项显示在页面上后,才运行某些代码的好方法是什么 更多信息 我之所以需要这样做,是因为我正在使用谷歌图表。图表呈现不完全正确,除非它们在呈现时在页面上实际可见(即:不隐藏)。似乎在调用集合项的onRender函数时,视图并没有完全呈现在页面上 我目前的“修复”是在调用onRender后半秒使用setTimeout来渲染费用。这是可行的,但却是一个丑陋的黑客: Backbone.Marionette.ItemView.extend({ ... onRender: fu

只有在主干或木偶收集项显示在页面上后,才运行某些代码的好方法是什么

更多信息 我之所以需要这样做,是因为我正在使用谷歌图表。图表呈现不完全正确,除非它们在呈现时在页面上实际可见(即:不隐藏)。似乎在调用集合项的
onRender
函数时,视图并没有完全呈现在页面上

我目前的“修复”是在调用
onRender
后半秒使用
setTimeout
来渲染费用。这是可行的,但却是一个丑陋的黑客:

Backbone.Marionette.ItemView.extend({
   ...
   onRender: function(){
      var chart = ...;
      var chart_data = ...;
      var options    = ...;
      setTimeout(function(){
            chart.draw(chart_data, options)  
         },
         500
      );
   }
   ...
})

我已经读过
关于如何工作的文章,但是如果我理解正确,只有在处理木偶区域时才会调用此方法。

不幸的是,木偶的
onRender
方法并不意味着对象实际上被添加到DOM中

如果您使用的是木偶区域,那么
onShow
可能会因为时间的原因而执行此操作。但是,由于它可以从DOM中分离,因此不能保证实际显示视图


实际的清洁解决方案是使用添加到木偶v2.3中的清洁剂。希望这能解决您的问题-但我相信=)

否则,您可以使用类似的插件在给定元素可见时获取
inview
事件:

Backbone.Marionette.ItemView.extend({
   events:{
     'inview #chartContainer': 'renderChart'
   },
   renderChart: function(){
      var chart = ...;
      var chart_data = ...;
      var options    = ...;
      chart.draw(chart_data, options)
   },
   ...
})