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

これは最小限の複製です。

なぜこのエラーが発生するのですか?

PSthorax : より高い担当者がタグを追加できますか? ありがとう!

4

1 に答える 1

1

Thorax では、eventsハッシュで指定されたすべてのイベントがインスタンス化時にオブジェクトに存在する必要があります。考えられる解決策は 2 つあります。

オブジェクトのインスタンス化の前に関数を追加

// 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 に答える