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 已成功加载,但我无法从中扩展“Widget”模型。

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 回答