1

对于这是否是一种“正确”的做事方式以及导致我看到的错误的原因,我将不胜感激。

我已经在我的基础流星安装中添加了主干 meteor add backbone

然后我设置一个router.js文件如下(仅显示2页作为示例);

var Router = Backbone.Router.extend({
  routes: {
    "":                 "index", 
    "help":             "help",  
    ... 
  },

  index: function() {
    Session.set('currentPage', 'homePage');
  },

  login: function() {
    Session.set('currentPage', 'loginPage');
  },

  ... 

然后对于页面我有模板看起来像这样的html文件......

<template name="homepage">
    {{#if route}}
    You're at the Home Page!
    {{/if}}
</template>

然后对于主页,我有一个包含以下内容的 html 文件;

<body> 
...
    {{> homepage}}
    {{> loginpage}} 
    {{> helppage}}
...
</body>

这适用于除指定的“主页”之外的所有页面,无论我在网站的哪个位置,都会始终呈现此模板。例如 myapp/ 作为根页面只显示主页模板,而 myapp/loginpage 显示登录页面模板和主页模板。所以每一页都展示了首页模板的较量。

有什么见解吗?(或更好的结构方式)。

谢谢

4

1 回答 1

3

最后是一个我可以回答的问题,因为这是我过去几个月每周工作 60 小时所做的事情:-P

您在这里做错了一些事情,它们是非常简单的修复程序,可以立即让您兴奋起来。

第一件事

您需要实例化所有路由器,然后初始化Backbone.pushState().

// This is just how I have been doing it, there are many correct ways.
var LoadedRouters = {
    Module1 : new Module1Router(),
    Module2 : new Module2Router(),
    ...
};
// After all routes instantiated, we tell Backbone to start listening.
Backbone.history.start({ pushState : true, root : "/" });

正确设置属性非常重要root,否则就会发生奇怪的事情。

第二件事

您必须从具体到最具体自上而下列出您的路由器。您上面概述的 URL 结构将始终匹配第一个路由并触发它。

routes : {
    "help/phones/newservice" : HandleNewServiceHelp(),
    "help/phones/oldservice" : HandleOldServiceHelp(),
    "help/phones(/:any)" : HandleAllPhoneHelp(),
    "help(/:any)" : HandleAllHelp(),
    "" : HandleAllUnmatchedRoutes()
};

Backbone.router学习可能是一件棘手的事情。

于 2013-05-06T01:33:10.017 回答