繁体   English   中英

Requirejs + Backbone.js:TypeError:无法通过路由器 - 路由器不是一个功能?

[英]Requirejs + Backbone.js: TypeError: Can't pass in the router - Router is not a function?

我仍然试图理解requirejs是如何工作的,我相信我已经仔细地遵循了文档和其他教程。 但我似乎无法加载某些module ,例如router

这是我遇到问题的视图模型,

// File: js/view/list.js

define([
    'jquery',
    'underscore',
    'backbone',

    'router', // Request router.js

    // Pull in the Collection module.
    'collection/contacts',

    // Load the template
    'text!template/list.html'
], function($, _, Backbone, Router, ProjectCollection, Template){

        console.log(Router); // I have passed the router as Router!
        var router = Router();
        router.initialize();

});

结果,

未定义

list.js(第17行)TypeError:路由器不是一个函数

var router = Router();

这是js文件夹根目录下的路由器代码,

// File: js/router.js

define([
    'jquery',
    'underscore',
    'backbone',
    'view/list'
], function($, _, Backbone, ProjectListView){

    var AppRouter = Backbone.Router.extend({
        routes: {
            'list_contacts':    'renderListContactsPage'
        },

        renderListContactsPage: function () {
            var projectListView = new ProjectListView();
            projectListView.listContactsPage();
        }
    });

    var initialize = function(){
        var app_router = new AppRouter;
    };

    return {
        initialize: initialize
    };
});

任何想法我做错了什么,我该如何解决?

其他文件,

// File: js/main.js
require.config({
    //By default load any module IDs from js/lib
    baseUrl: 'js',
    paths: {
        jquery: 'lib/jquery/jquery-min',
        underscore: 'lib/underscore/underscore-min',
        backbone: 'lib/backbone/backbone-min',
        text: 'lib/text/text'
    },

    shim: {
        jquery: {
          exports: '$'
        },
        underscore: {
          exports: '_'
        },
        backbone: {
          exports: 'Backbone'
        }
      }
});

require([
    // Load our app module and pass it to our definition function
    'app'
], function(App){
    // The "app" dependency is passed in as "App"
    App.initialize();
});

和,

// File: js/app.js
define([
    'jquery',
    'underscore',
    'backbone',
    'router', // Request router.js
], function($, _, Backbone, Router){

    console.log(Router); // Here no error at all!

    var initialize = function(){

        // Pass in our Router module and call it's initialize function
        Router.initialize();
        Backbone.history.start();
    }

    return {
        initialize: initialize
    };
});

该错误消息可以解释这一切,真的:你的路由器模块的返回值(router.js)为对象文本 ,而不是一个函数调用等等()上会导致异常(在蒸馏水此的jsfiddle )。

它应该足以将调用更改为:

// (...)
console.log(Router); // I have passed the router as Router!
Router.initialize();

或者,您可以更改路由器以实际返回一个返回具有initialize函数的对象的函数,由您决定哪个解决方案更具可读性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM