Backbone.js事件不会消防

时间:2015-07-13 08:25:00

标签: javascript jquery backbone.js

过去几天我一直在努力让事件发生,所以我将应用程序剥离回基础知识,我仍然在解决触发事件不起作用的问题。

骨干中的其他所有内容都很有效,除此之外我希望有人可以提供帮助。

目前在我看来

    define([
  'jquery',
  'underscore',
  'backbone',
  'models/SpecificationModel',
  'collections/SpecificationCollection',
  'text!templates/specification/specificationlisttemplate.html'
], function($, _, Backbone, specModel, specCollection, specTemplate){

  var Specifications = Backbone.View.extend({

      events: {
            'click a.btn': 'showAlert'
      },
      showAlert: function() {
            alert('fired');
      },
      initialize:function() {
            _.bindAll(this, 'render');
            var self = this;
            this.collection = new specCollection();
            this.collection.fetch({
              success: function () {
                self.render();
              }
            });
        },

        render: function(){
          var data = {
            specs: this.collection.toJSON()
          };
          var compiledTemplate = _.template(specTemplate);
          $("#backBoneContent").html(compiledTemplate(data));
        }
      });

  return Specifications;
});

HTML

    <div id="backBoneContent">
    //

                    <tr>
                        <td>
                            <a href="#review/1" class="btn">View </a>
                        </td>
                    </tr>
                        <td>
                            <a href="#review/2" class="btn>View </a>
                        </td>
                    </tr>
   //
   </div>

1 个答案:

答案 0 :(得分:3)

您没有指定Backbone应附加视图 1 的任何el,因此无法委派事件且事件永远不会触发。

根据经验,永远不要在视图中直接使用jQuery对象,使用this.$elthis.$并将容器作为选项传递给您的视图:

在您的路由器中,

var specsView = new SpecsView({el: "#backBoneContent"});

在你看来

render: function() {
    ...
    this.$el.html(compiledTemplate(data));
}

1 请注意,访问$("#backBoneContent")对于Backbone没有特殊意义,它只是一个jQuery对象。