Javascript backbone.js视图中未触发事件

Javascript backbone.js视图中未触发事件,javascript,backbone.js,Javascript,Backbone.js,这是我对“tr”这一行的看法。我想单击名称单元格并弹出该单元格的视图。我无法让事件发生 我错过什么了吗?谢谢 gumballhead解决了这个问题,我遇到的问题是需要有一个标记名与ItemRowView关联。然后在render函数中,我需要执行self.$el.html(this.template(model)) 我想这可能有助于与 ItemRowView = Backbone.View.extend({ initialize : function() { },

这是我对“tr”这一行的看法。我想单击名称单元格并弹出该单元格的视图。我无法让事件发生

我错过什么了吗?谢谢

gumballhead解决了这个问题,我遇到的问题是需要有一个标记名与ItemRowView关联。然后在render函数中,我需要执行self.$el.html(this.template(model))

我想这可能有助于与

    ItemRowView = Backbone.View.extend({

    initialize : function() {
    },
    template : _.template($('#item-row-template').html()),
    render : function() {       
        var self=this;        
        var model = this.model.toJSON();
        self.$el = this.template(model);
        return self.$el;
    },

    events : {
        "click td .item-name" : "viewOneItem"
             //Even if I change it to "click td":"viewOneItem", still not firing
    },
    viewOneItem : function() {
        console.log("click");
    }
});
集合视图:

ItemsView = Backbone.View.extend({

    initialize : function() {
    },
    tagName : "tbody",

    render : function() {
        var self = this;
        this.collection.each(function(i) {
            var itemRowView = new ItemRowView({
                model : i
            });
            self.$el.append(itemRowView.render()); 
        });
        return self.$el;
    }

});
应用程序视图: AppView=Backbone.View.extend({ this.items=新项目()

对于模板:

<script type="text/template" id="item-row-template">
<tr>
    <td class="item-name">{{name}}</td>
    <td>{{description}}</td>
</tr>
</script>

 <table>
    <thead>
        <tr>
        <th>name</th>
        </tr>
    </thead>
    <tbody id="items-tbody">

    </tbody>
 </table>

{{name}}
{{description}}
名称
为您的选择器使用
“单击td.item name”
。您当前正在侦听对类为“item name”的td的后代的单击

仅供参考,模板中没有开始标记的锚元素也有结束标记

编辑:我想你想要
self.$el.html(this.template(model));
而不是
self.$el=this.template(model);

但是没有必要将
this
与您发布的代码别名为
self

编辑2:很高兴你把它整理好了。让我给你解释一下

所有主干视图都需要一个根元素。在实例化时,事件哈希中的事件将委托给该元素。当主干视图在没有现有元素的情况下实例化时,它将基于配置设置创建一个,如
标记名
,其默认值为
“div”
。在显式注入元素之前,该元素不会出现在DOM中

因此,当您在render方法中设置self.$el时,您正在覆盖根元素(以及事件,尽管它们永远不会触发,因为它会侦听DOM中不存在的div的后代td的单击)


作为旁注,在您的情况下,这不是正确的方法,您可以执行
this.setElement($(this.template(model));
将事件从实例化时创建的div重新发送到原始模板创建的tr。

尝试
“单击'td.item name'”
Backbone通过按空格拆分来绑定事件,我认为……您的选择器可能有问题。啊,委派的事件(这些事件)使用不同的拆分器。`var delegateEventSplitter=/^(\S+)\S*(*)$/;`@Cory:那不行,
events
解析器不知道单引号的意思。有一种感觉它不喜欢itThanks,我已经修复了锚。我已经在模板中指定了“{name}”,类是“item name”…即使我删除类名并单击“click td”,它仍然不起作用。谢谢,我得到了“未捕获的TypeError:Object#没有方法‘createDocumentFragment’”,当我在这里使用self.$el.html()时……是否使用元素初始化视图?在集合中,在循环模型时,我执行了:var itemRowView=new ItemsRowView({model:I});然后我将itemRowView附加到集合视图的呈现中…您的意思是在ItemsRowView的初始化函数中执行一些操作吗?谢谢!但是您的ItemsRowView是否管理页面上已经存在的元素,或者是否打算动态添加这些元素?您的模型是集合的一部分吗?您可能希望发布表视图的代码也
<script type="text/template" id="item-row-template">
<tr>
    <td class="item-name">{{name}}</td>
    <td>{{description}}</td>
</tr>
</script>

 <table>
    <thead>
        <tr>
        <th>name</th>
        </tr>
    </thead>
    <tbody id="items-tbody">

    </tbody>
 </table>