【问题标题】:Passed parameter to initialize() view is undefined in Backbone.js在 Backbone.js 中未定义传递给 initialize() 视图的参数
【发布时间】:2018-01-22 14:13:32
【问题描述】:

我正在开发一个 Backbone.js 应用程序,它利用所有视图和子视图扩展的“主视图”。

主视图

define(['backbone'], function (Backbone) {
   return Backbone.View.extend({
      events: {

      },

      showSuccess: function (msg) {
         alert(msg);
      }
   });
});

然后我有一个生成页面的主视图,这可以调用较小部分的子视图:

define(['backbone','masterView', 'mySubView'], function (Backbone, mView, mySubView) {
   var mainView = mView.extend({
      events: function () {
         return _.extend({}, coreView.prototype.events, {

         });
      },

      render: function () {
         var sub = new mySubView({'foo': 'bar'});
      }
   });
   return new mainView();
});

最后是我的子视图,它在初始化时显示options 未定义。

define(['backbone','masterView', 'mySubView'], function (Backbone, mView, mySubView) {
   var subView = mView.extend({
      events: function () {
         return _.extend({}, coreView.prototype.events, {

         });
      },

      initialize: function (options) {
         console.log(options);
      }
   });
   return new subView();
});

在此设置中,为什么当我将 options 传递给我的 MainView 时未定义它们?如果子视图没有扩展masterView,而是扩展Backbone.view,它可以正常工作。

【问题讨论】:

    标签: javascript backbone.js requirejs


    【解决方案1】:

    子视图文件中的最后一行:

    return new subView();
    

    您正在返回一个新实例,而不是返回 subview 模块中的构造函数。应该是:

    return subView;
    

    请注意,as a convention, JavaScript 代码应使用 PascalCase 表示类型(构造函数、类等),实例(变量、属性等)应使用 camelCase .

    另外,我正在how to design a good base class with Backbone 上分享技巧。您可以将合并事件的责任转移到基类而不是每个子类。

    【讨论】:

    • 感谢其他格式提示和进一步阅读!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-28
    • 2011-06-27
    相关资源
    最近更新 更多