Backbone.js 中未定义传递给 initialize() 视图的参数

Passed parameter to initialize() view is undefined in Backbone.js

我正在开发一个 Backbone.js 应用程序,它使用一个 'master view',所有视图和子视图都从中扩展。

主视图

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();
});

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

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

return new subView();

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

return subView;

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

此外,我正在 上分享技巧。您可以将合并事件的责任转移到基础 class 而不是每个子 class.