javascript - Marionette - 在函数或对象中使用listenTo

标签 javascript marionette

我正在尝试使用这样的东西:

var a = Marionette.Object.extend({
    initialize: function () {
        //Works fine
        this.listenTo(this, "something", function(){...});

        //Problem
        (function(){
            this.listenTo(this, "somethingElse", function(){...});
        })();

        //Same...
        var b = function(){
            this.listenTo(this, "somethingElse", function(){...});
        }

        b();
    }
});

当我尝试运行此代码时,它显示:

Cannot read property 'listenTo' of undefined

对于功能。但问题是为什么?

据我所知,当一切准备就绪时,会调用 initialization: get ,这就是为什么另一个监听器在开始时起作用。如果我将监听器放入函数中,它应该是相同的,因为当调用它时,对象已经初始化,因此 this 存在。

知道如何解决这个问题,将监听器留在函数内吗?

提前致谢!

上述问题的解决方案(感谢 sp00m)

-- 新问题--

在对象内实现相同的效果:

var a = Marionette.Object.extend({
    b: (function(){
        this.listenTo(this, "somethingElse", function(){...});
    })()
});

最佳答案

您可以使用var self = this惯用法:

var a = Marionette.Object.extend({
  initialize: function () {

    var self = this; // maintain a reference to initialize's this

    (function(){
        self.listenTo(self, "somethingElse", function(){...});
    })();

  }
});

更多详细信息:What underlies this JavaScript idiom: var self = this?

关于javascript - Marionette - 在函数或对象中使用listenTo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33942722/

相关文章:

backbone.js - 如何在 Backbone Marionette 初始化程序中处理异步代码

javascript - Fancybox 2 如何在图片边上添加自定义栏目

javascript - 移动 'back' 按下后运行 javascript

javascript - javascript计算器有问题

javascript - Backbone - 将条目添加到集合中(从集合内部)

javascript - 如何查找在集合上触发了哪个事件

Javascript 字符串到 int 数组

javascript - 动态创建多个div结构

javascript - 如何通过 Backbone View 渲染保留状态消息/图标/通知?

javascript - Marionette:未找到 childViewContainer