appRouter 未在加载时触发

appRouter is not fired on load

我正在尝试为我的 backbone 应用程序设置路由器。但是,当我去 localhost:8888/extractorslocalhost:8888/extractors/new 时。没有输出任何控制台消息。为什么它在路由器本身中定义?

require(['new-extractor-view', 'extractors-collection', 'backbone'], function (NewExtractorView, ExtractorsCollection) {
    'use strict';

    var extractorCollection = new ExtractorsCollection();

    new NewExtractorView({
        collection: extractorCollection
    });

    //
    // Initialize URL router
    //
    var AppRouter = Backbone.Router.extend({
        routes: {
            'extractors': 'extractorsRoute',
            'extractors/new': 'newExtractorRoute',
            '*actions': 'defaultRoute'
        }
    });

    var appRouter = new AppRouter;


    appRouter.on('route:extractorsRoute', function () {
        console.log('test1')
    });

    appRouter.on('route:newExtractorRoute', function () {
        console.log('test2')
    });


    Backbone.history.start();
});

我觉得代码没问题,但我想你在创建新路由器时忘记了括号:

var appRouter = new AppRouter();

编辑:哦,我很确定 Backbone 只会匹配 localhost:8888/#extractors(带有前导标签)而不匹配 localhost:8888/extractors,如 here 所述。

如果你想在没有 # 的情况下使用 url 的 ,你应该像这样初始化历史记录:

Backbone.history.start({ pushState: true })

阅读有关 pushState 选项的更多信息。