0

为什么在页面刷新或页面加载时 el 未定义?是因为 el 不存在吗?

class ListView extends Backbone.View

    className: 'channels-list'
    el: '#main'

    initialize: ->
        console.log @el
        # undefined
4

2 回答 2

2

元素需要是标签名称或已存在于 DOM 中的元素。创建新视图时,将_ensureElement调用该函数

// Ensure that the View has a DOM element to render into.
// If `this.el` is a string, pass it through `$()`, take the first
// matching element, and re-assign it to `el`. Otherwise, create
// an element from the `id`, `className` and `tagName` properties.
_ensureElement: function() {
     //...
}

为避免这种情况,请将 script 标签放在元素标签下方或等待文档加载事件,例如使用 jQuery:

jQuery ->
    class ListView extends Backbone.View
        className: 'channels-list'
        el: '#main'
        initialize: ->
            console.log @el

或者,正如 Vitaliy 建议的那样,.elinitialize函数中休息。

于 2013-01-23T12:09:31.850 回答
1

确切地。如果你定义el它应该在 DOM 结构中可用

如果元素已经存在于 DOM 中,则可以在initialize方法内部再次设置元素:

@setElement $('#main')
于 2013-01-23T12:08:06.903 回答