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 木偶js路由-我在这里做错了什么?I';我发现路由操作未定义的错误?_Backbone.js_Marionette_Backbone Routing - Fatal编程技术网

Backbone.js 木偶js路由-我在这里做错了什么?I';我发现路由操作未定义的错误?

Backbone.js 木偶js路由-我在这里做错了什么?I';我发现路由操作未定义的错误?,backbone.js,marionette,backbone-routing,Backbone.js,Marionette,Backbone Routing,只是想得到一些基本的路由和运行。看过很多例子后,我认为下面的代码应该可以工作,但是当我运行时,我得到一个错误“无法获取未定义或空引用的属性'doChat'。初始化顺序是否有误 require(["marionette", "jquery.bootstrap", "jqueryui"], function (Marionette) { window.App = new Marionette.Application(); App.start();

只是想得到一些基本的路由和运行。看过很多例子后,我认为下面的代码应该可以工作,但是当我运行时,我得到一个错误“无法获取未定义或空引用的属性'doChat'。初始化顺序是否有误

    require(["marionette", "jquery.bootstrap", "jqueryui"], function (Marionette) {
        window.App = new Marionette.Application();

        App.start();

        App.addRegions({
        //add some regions here
        });

        //Set up routing       
        var AppRouter = Marionette.AppRouter.extend({
            appRoutes: {
                "": "doDefault",
                "chat": "doChat"
            },

            doDefault: function () {
                alert("doing default...")
            },
            doChat: function () {
                alert("doing chat...")
            }
        });

        var router = new AppRouter();

        //History
        if (Backbone.history) {
            Backbone.history.start();
        }
    })

AppRouter允许两种类型的路由,即
路由
属性中定义的标准主干路由和调用
appRoutes
属性中定义的另一个对象中的函数的路由

因此,要使上述代码正常工作,可以执行以下两种操作之一。最快的方法是将
appRoutes
属性更改为
routes
,这将执行正常的主干路由。第二个选项是创建另一个对象,并在实例化期间将其作为控制器传递给
AppRouter

var myController = {
    doDefault: function () {
        alert("doing default...")
    },
    doChat: function () {
        alert("doing chat...")
    }
}

var router = new AppRouter({
    controller: myController
});

批准人对此进行了详细说明。

是的。我懂了。选项2,控制器选项正在工作,对我来说似乎是最好的。谢谢你。我认为这些对象,路由器和控制器,应该在不同的文件中。我看到了一些例子,我想尝试一下。我还有其他一些问题,关于我是否应该使用路由来完成我所追求的目标,但它们属于另一篇文章。再次感谢。是的,我同意它们应该放在不同的文件中。我的应用程序往往在每个文件一个对象的基础上运行。保持清洁。