gpt4 book ai didi

javascript - Backbone.Marionette.ItemView 渲染后元素未准备好?

转载 作者:数据小太阳 更新时间:2023-10-29 06:07:25 24 4
gpt4 key购买 nike

即使在 Backbone.Marionette.ItemView 的 onRender 方法中,我也无法访问元素。

例如,我有:

模板:

<input type="text" id="searchBox">`

项目 View :

View = Backbone.Marionette.ItemView.extend
template: searchTemplate
onRender:
@setTypeahead ['a', 'b', 'c', 'd']
setTypeahead: (valueArray) ->
console.log $('#searchBox')
$('#searchBox').typeahead
source: valueArray

意外地,记录到控制台的对象不包含输入元素。选择器不起作用。这是为什么?

Marionette 的github 上小代码块内的评论here提到“在这里操作 el。它已经被渲染,并且充满了 View 的 HTML,可以开始了。”除非我误解了这一点,否则我认为模板将被渲染并准备好在 ItemView 的 onRender 函数内进行操作。

最佳答案

您需要将 jQuery 选择器的范围限定到 View ,因为 HTML 元素尚未添加到 DOM。


View = Backbone.Marionette.ItemView.extend
template: searchTemplate
onRender:
@setTypeahead ['a', 'b', 'c', 'd']
setTypeahead: (valueArray) ->
console.log $('#searchBox')

@$('#searchBox').typeahead
source: valueArray

之所以使用 onShow 有效,是因为元素是在此时添加到 DOM 中的。但这是一个坏主意,因为它允许选择器在页面中找到所有具有指定查询的元素,而不仅仅是这个特定 View 实例的元素。通过使用 @$("#searchBox"),您可以将 jQuery 选择器的范围限定到 View 实例,并且能够在 View 的 $el 中找到元素,即使 View 尚未添加到 DOM。

关于javascript - Backbone.Marionette.ItemView 渲染后元素未准备好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14288715/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com