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

标签 javascript ajax twitter-bootstrap backbone.js marionette

即使在 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/

相关文章:

javascript - 如何在 jquery 中将另一个 html 页面链接到海报图像?

javascript - 立即将 csv 文件中的数据显示到 handontable

css - 如何在 bootstrap 的 "media"的右下角放置徽章?

javascript - onclick在php上显示MySQL fetch echo的值

css - Bootstrap 填充不起作用

javascript - Access-Control-Allow-Origin 不允许 Origin null

javascript - 异步执行函数的返回值

javascript - https 请求出现问题

jquery - 如何使用ajax从数据库中在div区域的前端显示内容?

php - 如何注释jquery中包含一行php代码的jquery代码块