0

拡張したい新しい backbone.js ウィジェット モデルを作成しました。

        var Widget = Backbone.Model.extend({
            constructor: function() {
              console.log('Widget constructor called.');
            }
        });

ユーザーが表示するページに応じて、多数のウィジェットが Ajax 経由で読み込まれるため、ウィジェットごとに次のようにします。

        $.getScript('widgets/widget1', function(xhr){
            var widget1 = new pieChartWidget();
            widget1.render();
            widget1.update();
        });

「widgets/widget1」の内容:

$(function() {

    var pieChartWidget = Widget.extend({
            render: function(json) {
              console.log('Widget render called.'); 
            },
            update: function(json) {
              console.log('Widget update called.'); 
            }
    });

});

Firebug コンソールで、「pieChartWidget が定義されていません」というメッセージが表示されます。Javascript が正常に読み込まれていることはわかっていますが、そこから「ウィジェット」モデルを拡張することはできません。

4

1 に答える 1

1

ウィジェットは関数内で定義されています。したがって、そこで宣言されたすべての変数は、関数スコープ内でのみ表示されます。

$(function() {

  var pieChartWidget;

  // pieChartWidget is only visible here!

});

// pieChartWidget not visible here!

関数の外部からウィジェットにアクセスするには、それをグローバル変数 (アプリケーションの名前空間など) に割り当てる必要があります。window を使用することもできます (推奨される方法ではありません)。

次のようにウィジェットをウィンドウに割り当てると、コードは変更されずに動作するはずです。

$(function() {

  window.pieChartWidget = Widget.extend({
        render: function(json) {
          console.log('Widget render called.'); 
        },
        update: function(json) {
          console.log('Widget update called.'); 
        }
});

});

于 2011-11-29T14:03:36.213 に答える