我讨厌把这个问题放在那里(连同其他百万'事件没有解决问题),但无论出于何种原因,其他问题及其各自的答案对我不起作用。
这里是脚本' text / template'中的模板标记。 id为' display_template'
的代码<div class="display_data">
<a class="remove">X</a>
<div class="grid_6">
<%= Data %>
</div>
</div>
这是我在Coffeescript中的Backbone视图
$ ->
class window.WebsiteView extends Backbone.View
displayTemplate: _.template $('#display_template').html()
events:
'click .remove': 'clicked'
render: ->
$(@el).html @displayTemplate @model.toJSON()
@
clicked: ->
console.log 'clicked'
更新
看起来我可能没有正确地实例化View,它是从集合和集合的视图中设置的。
class window.Websites extends Backbone.Collection
model: Website
class window.WebsitesView extends Backbone.View
template: _.template $('<div />').html()
render: ->
$(@el).html @template
@collection.each @renderWebsite
@
renderWebsite: (website) =>
website.attributes.Index = @collection.indexOf website
view = new WebsiteView
model: website
$(@el).append view.render().el
如果我从点击事件中删除了css选择器,则点击“&#39;方法将为特定的视图触发,但一旦我添加了css选择器就停止工作。我怀疑它可能与@el
没有被正确绑定有关但我很难过,我希望有人可能会用我特定的语法指出我正确的方向。
答案 0 :(得分:1)
让我们来看看Backbone来源。在delegateEvents
方法中,我们有:
if (selector === '') {
this.$el.bind(eventName, method);
} else {
this.$el.delegate(selector, eventName, method);
}
你说当没有选择器时,你的代码可以工作;但当选择器为'.remove'
时,它不会。
一种可能性:你正在使用旧版本的jQuery。 {1.4}中添加了delegate
。
另一种可能性:可能有另一个事件处理程序,绑定在其他位置,正在执行preventDefault
或返回false
,从而阻止事件冒泡到el
。要查找这些内容,请使用浏览器的检查器,然后转到.remove
链接上的“事件监听器”以及其周围的任何内容。
答案 1 :(得分:0)
查看添加“preventDefault”调用是否有帮助:
clicked: (event) ->
event.preventDefault()
console.log 'clicked'