当我尝试对onRender
方法(或item:rendered
回调)中的某些HTML元素进行操作时,它会失败。
示例:
Bars.EditGallery = Backbone.Marionette.ItemView.extend template: 'bars/edit_gallery' className: 'edit-gallery' onRender: -> # If I just write @$('select').chosen(), it doesn't work # despite the jQuery object contains what I expect. # To get it working, I have to write: callback = -> @$('select').chosen() setTimeout(callback, 0)
与其他行为相同,例如将重点放在某个领域
你怎么处理那件事呢? setTimeout
的诀窍有效,但不是很优雅。
答案 0 :(得分:1)
我已经看到当用于渲染的模板异步加载时会发生这种情况。在最近的一个版本中,我认为我的拉请求已经解决了这个问题。您使用的是什么版本的木偶?
但是看起来你正在使用JST,所以这应该不是问题。您的设置中还有其他任何因素导致渲染异步发生吗?
但是,似乎有一些异步问题正在发生。由于使用setTimeout
修复了问题,因此我认为在调用onRender
方法之前渲染未完成。
此外 - 可以很难判断jQuery选择器是否实际上正在返回您想要的对象。如果您使用console.log来检查选择器,则可能会产生错误结果。 console.log
本身是异步的(在大多数浏览器中,无论如何......不确定所有)这意味着记录项目的请求在事件循环结束时排队。在记录发生时,DOM元素可能是可用的。
FWIW:我定期使用onRender
用于此目的,而且我从未使用setTimeout
来使其正常工作。所以我的假设是渲染过程中有趣的事情,与异步的东西有关。
答案 1 :(得分:0)
此问题是由Chosen引起的this issue引起的。