0

我无法弄清楚为什么视图内的事件的 jquery click 事件不会触发..

我有这样的主干视图:

class TreeList extends Backbone.View
    el: "#tree-list"
    events:
        "click li span":"toggleTree"
        "click li .select":"selectChannel"
    template: _.template """
        <ul id="tree"></ul>
    """
    initialize: =>
        $(@el).undelegate('li span', 'click');
        $(@el).undelegate('li .select', 'click');
        $("body").css "cursor", "progress"
        @render()
    render: =>
        $(@el).html @template
        _.each @collection.models, (model) =>
            item = new TreeListItem model:model
            $("#tree").append item.render()
            if model.attributes.selected
                            console.log($("##{model.attributes.ChannelID} .select"))
                $("##{model.attributes.ChannelID} .select")[0].click() # this event is never fired (selectChannel event)
        return this
    toggleTree: (e) =>
        console.log "toggle tree"
    selectChannel: (e) =>
        console.log "selet channel"

如您所见,当我单击元素时,我在元素上调用 click 事件会触发toggleTree事件,但不是使用 jquery click 方法。

该元素的 console.log :

[i.icon-check-empty select, prevObject: x.fn.x.init[1], context: document, selector: "#d972c967-6b56-40b5-99c9-a25300c03341 .select", jquery: "1.10.2", constructor: function…]

将元素的背景设置为黑色确实有效..

$("##{model.attributes.ChannelID} .select").css
    background:"#000"

任何人都可以阐明为什么会这样吗?

4

1 回答 1

0

我认为该元素没有添加到 DOM 树中。你的代码是:

$("#tree").append item.render()

您应该执行以下操作:

$("#tree").append item.render().el

你得到一个虚假存在的原因是你检查它使用

model.attributes.selected

您的模型视图已渲染但从未添加到 DOM 树中。我认为检查 DOM 树中是否存在组件的最佳方法是右键单击“树”并在 Firefox 或 Chrome 中使用“检查元素”功能。

于 2013-10-26T20:40:27.733 回答