骨干视图与模板不触发事件

时间:2012-04-06 09:19:40

标签: javascript events templates backbone.js

我的视图处理它的事件时遇到了一些问题。他们根本不开火。 该视图具有来自模板的html,如下所示:

<script type="text/template" id="intro-slide-template">
  <div class="slide intro" id="intro-slide">
    <a href="#" class="startpresentation" id="start-btn">
      <%= startpresentation %>
    </a>
  </div>
</script>

到目前为止一切顺利。 视图代码本身看起来像这样:

  /* ********* Slide View  *********  */
    window.IntroSlideView = Backbone.View.extend({           
        initialize: function(){             
            this.template = _.template($("#intro-slide-template").html());          
        },  
        render: function(){     
            $(this.el).html(this.template(this.model.toJSON()));             
        },
        events: {
            "click #start-btn": "clickHandler"
        },
        clickHandler: function() {
            console.log("IntroSlideView     ::      clickHandler");
        }           
    });

这就是我将幻灯片渲染到主应用程序视图的方式:

/* ********* App View  *********  */
window.AppView = Backbone.View.extend({
    el: $("#content"),
    initialize: function(){
        _.bindAll(this, 'render');      

        //render 
        this.render();
    },
    render: function(){                     
        this.el.innerHTML = "";     
        var slide = this.model.get("currentSlide");
        slide.render();             
        this.el.innerHTML = slide.el.innerHTML;
    }   
});

视图完全呈现在屏幕上,它的工作原理就像它应该的那样。 但是click事件没有触发。

当我检查幻灯片视图对象时,我可以看到它确实包含了包含正确HTML的el对象,包括必须触发单击事件的按钮。

当我记录视图的事件时,我看到它们被设置了:

Object
click #start-btn: "clickHandler"
__proto__: Object

1 个答案:

答案 0 :(得分:0)

尝试this pattern

window.AppView = Backbone.View.extend({
  render: function() {
    this.slide = new window.IntroSlideView({ el: this.$(".slide") });

    // ...
  }
});