我已经关注了大量的屏幕演员以及广泛搜索骨干文档,我无法弄清楚为什么我的观看事件没有被解雇。我的(短)测试代码如下:
<script type="text/javascript" src="js/jquery-1.7.2.min.js"></script>
<script type="text/javascript" src="js/underscore.min.js"></script>
<script type="text/javascript" src="js/backbone.min.js"></script>
<script type="text/javascript">
var App = (function($){
var NavigationItemView = Backbone.View.extend({
el: '#navigation',
initialize: function(params){
this.label = params.label;
this.appendTo = params.appendTo;
},
events: {
"click #add" : "test"
},
test: function(){
$(this.el).html("<li>Testing...</li>");
},
render: function(){
$(this.el).html("<li><a href=\"#\">"+this.label+"</a></li>");
}
})
var self = {};
self.init = function(){
new NavigationItemView({ label: 'Test Nav Label' });
}
return self;
});
$(document).ready(function(){
App(jQuery).init();
})
</script>
如果我更改了init方法代码:
new NavigationItemView({ label: 'Test Nav Label' })
对此:
new NavigationItemView({ label: 'Test Nav Label' }).render()
完美地调用render方法,表明视图的设置没有问题。我可以用test()替换render(),同样也可以。
然而,点击ID #add链接的事件甚至不会触发测试,当然应该如此?为了澄清,我在DOM中有一个id为'add'的链接,我已经检查并再次检查。
如果我使用jQuery添加事件挂钩并手动触发视图的某些方法,那就可以了。它是骨干自己的事件钩子,对我不起作用。
我查看了相关帖子,大部分建议都使用了我所拥有的 el 属性。在我的情况下,#naviz是空的。我已将其更改为div但行为没有变化。
非常感谢。
答案 0 :(得分:3)
你的#add元素是你的view元素的子元素(#navigation)吗? 仅在您查看“el”的子元素上触发事件。例如,这不起作用:
<div id="navigation">
...
</div>
<div id="add">
...
</div>
虽然这会:
<div id="navigation">
...
<div id="add">
...
</div>
...
</div>