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 は 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 に答える