0

我有一个非常基本的 Backbone 应用程序,它使用路由器来实例化视图和集合。在玩这个应用程序时,我注意到如果我把这行代码实例化路由器

 router = new DocsRouter();

在 application.js 文件的顶部,然后该应用程序无法运行;它必须在文件的底部。然而,这对我来说没有意义。为什么这行代码的位置很重要,因为启动应用程序的所有重要事情都发生在路由器内部?我不应该能够从任何地方触发路由器吗?

 window.DocsRouter = Backbone.Router.extend({

        initialize : function() {

            this.docs = new Docs();

            this.docs.fetch();


            this.docFormView = new DocFormView({ collection : this.docs });
            this.docsView = new DocsCollectionViewTempo({ collection : this.docs });
            this.docsView.render();

            this.route("doc/:id", "doc", function(id){
                console.log(id, this.docs.get(id).toJSON());
            });
        },

        routes : {
            "" : "root",
            "about" : "about",
            "doc/:id" : "doc"
        },

        root : function() { console.log('Vous êtes à la racine');},
        about : function() { console.log('A propos : ceci est un tutorial BackBone');},
        doc : function(id) { console.log(id, this.docs.get(id).toJSON()); }
    });

 router = new DocsRouter();
 Backbone.history.start();
4

1 回答 1

1

不可以。在声明 DocRouter 之前,您不能创建 DocRouter 的实例。

window.DocsRouter = Backbone.Router.extend({..});
router = new DocsRouter();

这两行的顺序必须是这样。在第一行之前 DocRouter 不存在,因此您无法实例化它。

于 2012-10-23T19:45:52.477 回答