javascript - 在事件回调中获取对模型的引用

标签 javascript jquery events backbone.js

第一次使用 Backbone.js,我不确定自己这样做是否正确。

我有两个模型的两个 View ,我想使用 event aggregator方法来触发两者之间的事件。

聚合器声明:

Backbone.View.prototype.eventAggregator = _.extend({}, Backbone.Events);

因此,在一个 View 中,我有一行像这样的行,它将触发 removeRow 方法。

this.eventAggregator.trigger("removeRow", this.row);

在另一个 View 中

MyView = Backbone.View.extend({
    initialize: function() {
      this.eventAggregator.bind("removeRow", this.removeRow);
      this.model.get("rows").each(function(row) {
        // Do stuff
      }); 
    },
    removeRow: function(row) {
       // row is passed in fine
       // this.model is undefined
       this.model.get("rows").remove(row);
    }
});

我想我明白为什么 this.model 未定义,但是我可以做什么来维护引用,以便我可以在回调中使用 this.model ?我考虑过将模型传递到第一个 View ,然后将其传递回触发器调用中,但这似乎使事件聚合器的整个要点变得毫无意义。如果我有模型,我可以直接调用 .remove 方法,并且失去了我的第一个 View 不知道模型的好处。有什么建议吗?

最佳答案

我认为您有绑定(bind)问题。

您有两种方法可以确保this将是View实例:

1。使用bindAll

在您的View.initialize()中,您可以添加以下行:

_.bindAll( this, "removeRow" )

Interesting post of @DerickBailey about this matter

2。在绑定(bind)声明中使用可选的第三个参数

像这样:

this.eventAggregator.bind("removeRow", this.removeRow, this);

Backbone documentation about this matter

关于javascript - 在事件回调中获取对模型的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10820610/

相关文章:

jquery - 如何在伪元素后应用 url 路径?

java - 如何获取 thymeleaf 中的内容路径?

JavaScript - 创建超过 1 个对象时,类事件内部出现 "this"问题

javascript - 需要一种方法从许多相同元素之一获取 attr

JavaScript:如何构造两个以上的回调

css - 如何使用 :focus? 等 CSS 选择器修改 sibling 的属性

javascript - 动态添加下拉列表到jsp页面

javascript - Typescript 中的条件默认导出

php - 需要一种使用 javascript 重复轮询文件的简单方法

javascript - 行为发生奇怪的变化 - Windows 8.1 中的 <textarea>