1

使用以下Thorax 2.0.1代码:

MyView = Thorax.View.extend({
    events: {
        'foo': 'bar'
    },
    template: 'Hello world'
});

foo = new MyView();

foo.bar = function() {}

尝试创建视图时出现以下错误:

Uncaught TypeError: Cannot read property '_thoraxBind' of undefined   [VM] thorax.js (849):1
  _.extend._addEvent                                                  [VM] thorax.js (849):1
  (anonymous function)                                                [VM] thorax.js (849):1
  j.each.j.forEach                                                          underscore.js:79
  _.extend.on                                                         [VM] thorax.js (849):1
  (anonymous function)                                                [VM] thorax.js (849):1
  j.each.j.forEach                                                          underscore.js:87
  h                                                                   [VM] thorax.js (849):1
  at.event.configure                                                  [VM] thorax.js (849):1
  (anonymous function)                                                [VM] thorax.js (849):1
  j.each.j.forEach                                                          underscore.js:87
  ot.View.Backbone.View.extend._configure                             [VM] thorax.js (849):1
  a.View                                                        [VM] backbone-min.js (848):1
  ot.View.Backbone.View.extend.constructor                            [VM] thorax.js (849):1
  r                                                             [VM] backbone-min.js (848):1
  (anonymous function)                                                             main.js:8

这是一个最小的复制

为什么会出现这个错误?

PS:有更高代表的人可以添加thorax标签吗?谢谢!

4

1 回答 1

1

Thorax 要求哈希中指定的所有事件在events实例化时都存在于对象上。有两种可能的解决方案:

在对象实例化之前添加函数

// Add 'bar' function to object before instantiation
MyView = Thorax.View.extend({
    events: {
        'foo': 'bar'
    },
    template: 'Hello world'
});

MyView.prototype.bar = function() {}

foo = new MyView();

使用匿名函数来包装调用

如果您稍后要动态添加该函数,您还可以执行以下操作:

// Wrap call to this.bar in anonymous function to satisfy Thorax
MyView = Thorax.View.extend({
    events: {
        'foo': function(e) { this.bar(e); }
    },
    template: 'Hello world'
});

foo = new MyView();

foo.bar = function() {}
于 2013-09-24T16:19:17.463 回答