我试图制作一个基本控制器,以提供其他控制器可以扩展的一些通用功能,但是以某种方式,当我尝试扩展我的基本控制器时出现错误。
基本控制器
define(function (require) {
var Marionette = require('marionette');
var BaseController = Marionette.Controller.extend({
initialize: function(options){
// Do stuff
},
// Other stuff
});
return new BaseController();
});
正在扩展的控制器
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
也许我不能扩展控制器?
最佳答案
您需要从基本控制器文件的return语句中删除new
和()
return BaseController; // Remove the new && () here
使用
new BaseController()
调用返回一个BaseController
实例,而不是您尝试用于extend
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();
});
这样,您的控制器模块将始终返回可再次用于
extend
的构造函数,而不是返回单个实例:// 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 - MarionetteJs范围基础 Controller ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23902629/