0

エラーがjQueryによって生成されることはわかっています。以下のエラーを回避するために backbone.marionette アプリケーションを構築する方法はありますか?

Uncaught TypeError: Cannot call method 'show' of undefined

エラーは、領域を持つレイアウトを作成したために発生します。onRender 関数では、コレクションをロードしてフェッチを実行します。フェッチが完了したら、リージョンにデータを入力します。別のビューに切り替えると、存在しない self.content.show が原因でエラーが発生します。

var view = Marionette.Layout.extend({
    template: _.template(tplPage),
    className: 'customers-view',
    regions:{
        content: '.customers-content'
    },

    onRender: function(){
        var self = this,
            colCustomers = new ColCustomers();

        colCustomers.fetch({success: function(){
            self.content.show(new ViewCustomersList({collection: colCustomers}));
        }});
    }
});

注: 現時点では、try catch で self.content.show() をラップし、その動作を確認しています。理想的にはそれを避けます。

4

1 に答える 1

1

関数を変更してonRender、別の方法でフェッチをリッスンします。

onRender: function(){
  var colCustomers = new ColCustomers();
  this.listenTo(colCustomers, "sync", function () {
    this.content.show(new ViewCustomersList({collection: colCustomers}));
  });
  colCustomers.fetch();
}

私がしたことは、イベント リスナーをバインドするアプローチを変更することでした。listenToの関数を使用するBackbone.Eventsと、リスナー オブジェクトが終了したときに無料でクリーンアップされるハンドラーを取得できます。

于 2013-07-11T16:15:17.893 に答える