单击'Backbone.js View'中的Event不起作用

che*_*ang 3 javascript backbone.js

我试着开始使用backbone.js,但是当我不使用'body'作为View的el时,我发现事件不起作用.这是代码.您可以将其另存为html文件并运行它.

<html>
    <body>
        <button id='openEssay'>test</button>
        <div id='div' style='width:100px;height:100px;'></div><script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"></script>
        <script src="http://ajax.cdnjs.com/ajax/libs/underscore.js/1.1.6/underscore-min.js"></script>
        <script src="http://ajax.cdnjs.com/ajax/libs/backbone.js/0.3.3/backbone-min.js"></script><script>
    (function($){
        var AppView = Backbone.View.extend({

            el:'body',//success
    //fail  el:'#div',
    //fail    tagName: 'li',
    //fail    id:'div',
            initialize:function(){
                _.bindAll(this, 'openEssay');
            },
            events:{
                'click button#openEssay':'openEssay'
            },
            openEssay:function(){
                alert('a');
            }
       });
       var app = new AppView();
    })(jQuery);

    </script>
    </body>
    </html>
Run Code Online (Sandbox Code Playgroud)

mu *_*ort 15

Backbone this.el使用委托形式on(或delegate在较旧的Backbones中)将事件处理程序绑定到视图,Backbone.View#delegateEvents有关详细信息,请参阅.所以如果你想要这些事件:

events: {
    'click button#openEssay':'openEssay'
}
Run Code Online (Sandbox Code Playgroud)

做任何事情然后this.$el.find('button#openEssay')需要匹配的东西(this当然,视图对象).您的四次尝试中只有一次:

  1. el: 'body'
  2. el:'#div'
  3. tagName: 'li'
  4. id: 'div'

将放入<button id="openEssay">内部this.el所以只有(1)openEssay在你按下按钮时打电话.如果你把按钮放在里面,#div那么(2)也会起作用.

  • 哦!它的作品!谢谢!在中文里,你非常喜欢牛! (3认同)