0

当我尝试对onRender方法(或item:rendered回调)中的某些 HTML 元素进行操作时,它会失败。

例子:

Bars.EditGallery = Backbone.Marionette.ItemView.extend
  模板:'bars/edit_gallery'
  类名:'编辑画廊'

  渲染:->
    # 如果我只写@$('select').chosen() 是行不通的
    # 尽管 jQuery 对象包含我所期望的。
    # 为了让它工作,我必须写:
    回调 = -> @$('select').chosen()
    设置超时(回调,0)

其他操作也是如此,例如将焦点放在某个领域。
你怎么处理?有效的技巧,setTimeout但它不是很优雅。

4

2 回答 2

1

当用于渲染的模板异步加载时,我已经看到了这种情况。我以为我的拉取请求在最近的版本中解决了这个问题。你用的是什么版本的木偶?

但无论如何,看起来你正在使用 JST,所以这不应该是问题。您的设置中是否还有其他任何内容导致渲染异步发生?

不过,似乎可能发生了一些异步问题。由于使用解决了这个问题,这让我认为在调用方法setTimeout之前渲染没有完成。onRender

此外 - 很难判断 jQuery 选择器是否真的立即返回了您想要的对象。如果您使用 console.log 来检查选择器,这可能会给出错误的结果。console.log本身是异步的(在大多数浏览器中,无论如何......不确定),这意味着记录项目的请求在事件循环结束时排队。记录发生时,DOM 元素很可能是可用的。

FWIW:我onRender经常使用这个确切的目的,而且我从来没有使用setTimeout它来使它工作。所以我的假设是渲染过程中发生的一些有趣的事情,与异步的东西有关。

于 2012-05-14T12:56:27.057 回答
0

如本期所述,问题是由Chosen引起的。

于 2012-06-01T10:02:52.647 回答