javascript - Marionette Js 扩展底座 Controller

标签 javascript backbone.js marionette frontend

我正在尝试制作一个基本 Controller ,它提供其他 Controller 可以扩展的一些常见功能,但当我尝试扩展我的基本 Controller 时,我不知何故收到错误。

基础 Controller

define(function (require) {
  var Marionette = require('marionette');

  var BaseController = Marionette.Controller.extend({
    initialize: function(options){
      // Do stuff
    },

    // Other stuff
  });
  return new BaseController();
});

正在扩展的 Controller

define(function (require) {
  var Marionette = require('marionette')
    , BaseController = require('controllers/base_controller')
    ;

  var MyController = BaseController.extend({
    // Do stuff
  });

  return new MyController();
});

错误:

Uncaught TypeError: undefined is not a function mycontroller.js line 6

也许我无法扩展 Controller ?

最佳答案

您需要从基本 Controller 文件的 return 语句中删除 new()

return BaseController; // Remove the new && () here

使用 new BaseController() 调用会返回一个 BaseController 实例,而不是您尝试用来扩展 MyController 的构造函数与。

您还应该考虑从 MyController 文件中删除它们,然后在需要时创建新实例;

例如:

// controllers/my_controller.js
define(function (require) {
    var Marionette = require('marionette')
    , BaseController = require('controllers/base_controller');

    var MyController = BaseController.extend({
    // Do stuff
    });

    return MyController;
});

// someotherfile.js
define(function (require) {
   var MyController = require('controllers/my_controller');
   var myControllerInstance = new MyController();
});

这样,您的 Controller 模块将始终返回可用于再次扩展的构造函数,而不是返回单个实例:

// controllers/my_awesome_controller.js
define(function (require) {
   var MyController = require('controllers/my_controller');
   var MyAwesomeController = new MyController.extend({
       // Extend more awesomeness
   });
   return MyAwesomeController;
});

关于javascript - Marionette Js 扩展底座 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23902629/

相关文章:

javascript - Marionette - 初始化事件不触发

templates - 如何在backbone.marionette 中使用EJS 模板?

javascript - 什么时候应该使用setScriptTimeout?

javascript - 使用 useCallback/useMemo 卡住闭包

javascript - IE9 的 AJAX 响应包含无效字符

javascript - 通过事件实现主干功能

iphone - Backbone.js 适用于移动设备吗?

javascript - YQL 返回重复条目

javascript - 即使 HTML 元素没有附加到 DOM,它们也会加载吗? Backbone 观点呢?

backbone.js - 在 Backbone Marionette 中加载数据的最佳实践是什么?