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)
},
...
})