javascript - 如何在 Backbone subview 中绑定(bind)点击事件

标签 javascript events backbone.js

我在理解 Backbone subview 中的事件绑定(bind)时遇到问题。我的观点定义如下:

TenantView = Backbone.View.extend({
  events: {
    "click": "setActive"
  },
  initialize: function() {
    this.parentEl = this.options.parentEl;
    return this.render();
  },
  template: new EJS({
    url: '/scripts/templates/tenant.ejs'
  }),
  render: function() {
    $(this.parentEl).children('ul').append(this.template.render(this.model));
    return this;
  },
  setActive: function(event) {
    return this.model.set('active', true);
  }
});

该模板仅包含 li包含 a 。这样做,我的 View 上的点击事件没有被捕获,我的方法setActive永远不会被触发。

当我将视野扩展为el时属性如 el: 'li'我的 (2) View 之一正常运行并触发 setActive功能。第二个 View 根本没有反应。如果我检查 el View 初始化期间的属性,工作 View 的 el属性指向右侧li ,失败的 View el指向第一个li可以在页面中找到。

正如大家所见,当谈到 el 的含义时,我完全迷失了方向。属性。

问题是,如何将 View 上的点击绑定(bind)到这个 View setActive功能?

谁能帮我解答一下吗?

问候 菲利克斯

最佳答案

首先,您可以阅读documentationthis 。那里给出了关于el的解释。

由于 TenantView 具有 parentEl 属性,我假设它是从某个 parent_view 渲染的。我建议采用如下所示的方法并尝试一下。

var ChildView = Backbone.View.extend({
  tagName : "li", // change it according to your needs

  events : {
    "click": "setActive"
  },

  initialize : function() {
    _.bindAll(this, "setActive");
    // code to initialize child_view
  },

  render : function() {
    // as I'm not familiar with the way you are using template, 
    // I've put simple call to render template, but it should render the
    // content to be kept inside "li" tag
    this.$el.html(this.template()); 

    return this;
  },

  setActive : function(event) {
    // code to be executed in event callback
  }
});


var ParentView = Backbone.View.extend({
  el : "#parent_view_el",

  initialize : function() {
    // parent view initialization code
  },

  render : function() {
    // a place from where ChildView is initialized
    // might be a loop through collection to initialize more than one child views
    // passing individual model to the view

    var child_view = new ChildView();

    this.$("ul").append(child_view.render().$el); // equivalent to this.$el.find("ul")

    return this;
  }
});

希望对你有帮助!!

关于javascript - 如何在 Backbone subview 中绑定(bind)点击事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13269071/

相关文章:

javascript - jQuery 事件未触发。

backbone.js - 我在哪里可以找到一些好的 Backbone 关系教程?

c# - 多个线程订阅同一个事件

events - ItemInvoked 与 SelectionChanged

javascript - 访问主干获取参数

javascript - 使用 Backbone 的 Fetch() 发出 AJAX 请求时如何访问 XHR 对象?

javascript - SailsJS 获取发布的数据

javascript - Jasmine 和 Angularjs - 为什么 $index 未定义?

javascript - 如何检测被其他面孔隐藏的 3D 形状的面孔(从 Angular 看不到)?

javascript - 当控制台记录某些内容时是否会触发事件?