Backbone.js视图事件未触发

时间:2012-03-27 10:57:59

标签: jquery javascript-events backbone.js backbone-events

我已经关注了大量的屏幕演员以及广泛搜索骨干文档,我无法弄清楚为什么我的观看事件没有被解雇。我的(短)测试代码如下:

<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但行为没有变化。

非常感谢。

1 个答案:

答案 0 :(得分:3)

你的#add元素是你的view元素的子元素(#navigation)吗? 仅在您查看“el”的子元素上触发事件。例如,这不起作用:

<div id="navigation">
    ...
</div>

<div id="add">
    ...
</div>

虽然这会:

<div id="navigation">
    ...
    <div id="add">
        ...
    </div>
    ...
 </div>