Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Backbone.js Marrionette.js NoMethodError:Method';xxx和x27;在控制器上找不到,但它在那里_Backbone.js_Marionette - Fatal编程技术网

Backbone.js Marrionette.js NoMethodError:Method';xxx和x27;在控制器上找不到,但它在那里

Backbone.js Marrionette.js NoMethodError:Method';xxx和x27;在控制器上找不到,但它在那里,backbone.js,marionette,Backbone.js,Marionette,我得到错误:在控制器上找不到方法“go_start” go_start函数仅在我的项目中的两个位置(我搜索过): StartRouter.js define(['marionette'], function(Marionette) { 'use strict'; var StartRouter = {}; StartRouter.Router = Marionette.AppRouter.extend({ appRoutes: { "start": "go

我得到错误:在控制器上找不到方法“go_start”

go_start函数仅在我的项目中的两个位置(我搜索过): StartRouter.js

define(['marionette'], function(Marionette) {
  'use strict';

  var StartRouter = {};

  StartRouter.Router = Marionette.AppRouter.extend({
    appRoutes: {
        "start": "go_start"
    }
  });

  return StartRouter;
});
和StartController.js

define(['underscore', 'marionette', 'app/vent',
    'text!templates/StartLayout.html',     'views/InspectorStartView','views/InspectorStartView'],
function(_, Marionette, vent, layout, InspectorStartView, PlayerStartView) {
'use strict';

// public module API
var Controller = {};

// private
var Layout = Marionette.Layout.extend({
    template: _.template(layout),

    regions: {
        inspector: "#inspector_choice",
        player: "#player_choice"
    }
});

// private
var _initializeLayout = function() {
    console.log('initializeLayout...');
    Controller.layout = new Layout();
    Controller.layout.on("show", function() {
        vent.trigger("layout:rendered");
    });
    vent.trigger('app:show', Controller.layout);
};

// controller attach a sub view/ search View
vent.on("layout:rendered", function() {
    console.log('layout:rendered =>StartController');

    // render views for the existing HTML in the template, and attach it to the layout (i.e. don't double render)
    var inspectorStartView = new InspectorStartView();
    Controller.layout.inspector.attachView(inspectorStartView);

    var playerStartView = new PlayerStartView();
    Controller.layout.player.attachView(playerStartView);
});

    // controller show inspector in the layout / subview
    vent.on('show:inspector', function(inspectorStartView) {
        // console.log('show books event');
        Controller.layout.inspector.show(inspectorStartView);
    });

    // controller show inspector in the layout / subview
    vent.on('show:player', function(playerStartView) {
        // console.log('show books event');
        Controller.layout.inspector.show(playerStartView);
    });


// public API
Controller.go_start = function(term) {   **//<-- function go_start**
    _initializeLayout();
    //vent.trigger("search:term", term);
};

return Controller;
因此,我需要所有路由器和控制器,但当我在调试器中运行该代码时,我有一些未定义的项:

options: Object
helpController: Object
helpRouter: Object
homeController: Object
go_home: function () {
__proto__: Object
inspectorController: undefined
inspectorRouter: undefined
loginController: Object
loginRouter: Object
playerController: undefined
playerRouter: Object
router: Object
Router: function (){ parent.apply(this, arguments); }
__proto__: Object
startController: Object
go_start: function (term) {
__proto__: Object
startRouter: undefined
__proto__: Object
HomeController: Object
StartController: Object
StartRouter: undefined
DesktopRouter: Object
InspectorController: undefined
为什么有些是未定义的?StartRouter和StartController具有go_启动功能。HelpRouter/控制器没有也不应该启动,但它正在抛出一个错误

欢迎所有建议


Andrew看来您的RequireJS导入出现故障。
HelpRouter
变量映射到
“routers/StartRouter”
模块,随后的所有模块都将关闭一个

AMD导入格式很容易导致这种类型的简单错误,调试可能需要很长时间,因为不知何故,这是你永远不会想到的地方。这就是为什么我更喜欢RequireJS提供的:

define(function(require) {
  var HomeController  = require('routers/HomeController'),
      StartController = require('routers/StartController'),
      //etc...
});

对于你们中的一些人来说,这里是芬克利夫提出的有效解决方案

// Includes Desktop Specific JavaScript files here (or inside of your Desktop router)
define(function(require) {
  var App = require("app/App"),
        // Routers with its controller
        DesktopRouter       = require("routers/DesktopRouter"),
        HomeController      = require("routers/HomeController"),

        StartRouter         = require("routers/StartRouter"),
        StartController     = require("routers/StartController"),

        LoginRouter         = require("routers/LoginRouter"),
        LoginController     = require("routers/LoginController"),

        InspectorRouter     = require("routers/InspectorRouter"),
        InspectorController = require("routers/InspectorController"),

        PlayerRouter        = require("routers/PlayerRouter"),
        PlayerController    = require("routers/PlayerController"),

        HelpRouter          = require("routers/HelpRouter"),
        HelpController      = require("routers/HelpController");

  var options = {
      homeController:       HomeController,
      router:               DesktopRouter,

      startController:      StartController,
      startRouter:          StartRouter,

      loginController:      LoginController,
      loginRouter:          LoginRouter,

      inspectorController:  InspectorController,
      inspectorRouter:      InspectorRouter,

      playerController:     PlayerController,
      playerRouter:         PlayerRouter,

      helpController:       HelpController,
      helpRouter:           HelpRouter

  }
  App.start(options);
  return function() {};
});

我对返回空函数有点不确定,但这是我看到的唯一一个示例,它是有效的-谢谢你!一双额外的眼睛能做什么。我在拼写每一个依赖项,以为我拼错了什么。@Kingdrew不客气。我仔细阅读了你的问题,认为“代码太多了,懒得通读它”。然后我看到了你的依赖数组,我就知道这就是问题所在——我自己也咬了我很多次:)说真的,看看简化的CommonJS语法。这会让你的生活更好。我还有一些不太对劲的地方。通过把我的木偶路由器和它的控制器分组,我把它弄清楚了。
options: Object
helpController: Object
helpRouter: Object
homeController: Object
go_home: function () {
__proto__: Object
inspectorController: undefined
inspectorRouter: undefined
loginController: Object
loginRouter: Object
playerController: undefined
playerRouter: Object
router: Object
Router: function (){ parent.apply(this, arguments); }
__proto__: Object
startController: Object
go_start: function (term) {
__proto__: Object
startRouter: undefined
__proto__: Object
HomeController: Object
StartController: Object
StartRouter: undefined
DesktopRouter: Object
InspectorController: undefined
define(function(require) {
  var HomeController  = require('routers/HomeController'),
      StartController = require('routers/StartController'),
      //etc...
});
// Includes Desktop Specific JavaScript files here (or inside of your Desktop router)
define(function(require) {
  var App = require("app/App"),
        // Routers with its controller
        DesktopRouter       = require("routers/DesktopRouter"),
        HomeController      = require("routers/HomeController"),

        StartRouter         = require("routers/StartRouter"),
        StartController     = require("routers/StartController"),

        LoginRouter         = require("routers/LoginRouter"),
        LoginController     = require("routers/LoginController"),

        InspectorRouter     = require("routers/InspectorRouter"),
        InspectorController = require("routers/InspectorController"),

        PlayerRouter        = require("routers/PlayerRouter"),
        PlayerController    = require("routers/PlayerController"),

        HelpRouter          = require("routers/HelpRouter"),
        HelpController      = require("routers/HelpController");

  var options = {
      homeController:       HomeController,
      router:               DesktopRouter,

      startController:      StartController,
      startRouter:          StartRouter,

      loginController:      LoginController,
      loginRouter:          LoginRouter,

      inspectorController:  InspectorController,
      inspectorRouter:      InspectorRouter,

      playerController:     PlayerController,
      playerRouter:         PlayerRouter,

      helpController:       HelpController,
      helpRouter:           HelpRouter

  }
  App.start(options);
  return function() {};
});