3

私は次のルートを持っています

App.Router.map(function(match) {
    this.route("days", { path: "/" });
    this.resource("day", { path: "/:day_id" }, function() {
        this.resource("slots", { path: "/slots" }, function() {
            this.resource("slot", { path: "/:slot_id" }, function() {
                this.route("edit", { path: "/edit" });
            });
        });
    });
});

上記の次のテンプレートがあります

script/app/templates/application.handlebars
script/app/templates/days.handlebars
script/app/templates/day.handlebars
script/app/templates/day/index.handlebars
script/app/templates/slots.handlebars
script/app/templates/slots/index.handlebars
script/app/templates/slot.handlebars
script/app/templates/slot/index.handlebars
script/app/templates/slot/edit.handlebars
  1. 上記は正しいですか
  2. 以下を実行する予定の場合、各ハンドルバー テンプレートにどのような html を含める必要がありますか (日数を除く)
  3. 以下を行いたいと仮定して、どのルートを定義する必要がありますか(日を除く)

    • 日が選択されたときに、関連付けられているモデル (この場合はスロット) のリストを表示したい
    • スロットが選択されている場合、そのインデックス ページから html が必要です (ルートに渡されるスロット ID パラメータに基づいて個々のスロットを表示します)。

アップデート

これまでのところ、「リソース」でマークされたルートには、内部リソースまたはルートがマークアップにドロップするために使用できる {{outlet}} が必要なようです。

たとえば、day.handlebars テンプレートには {{outlet}} があり、day/index.handlebars テンプレート内に for ループをドロップして、毎日表示します。次に、slots.handlebars テンプレート内に {{outlet}} を含め、slots/index.handlebars テンプレート内に別の for ループを追加して、使用可能な各スロットを表示します。

4

2 に答える 2

3

Jakub の回答に追加 - ネストされたリソースの場合、通常 (子を親の上にレンダリングする場合) xyz.handlebarsにはアウトレットのみを含める必要があり、xyz テンプレートの一部にしたい HTML はxyz/indexに入れる必要がありますハンドルバー。これは、ember が親リソースが常に存在すると想定しているため、親リソースに戻るたびに再レンダリングされないためです。ただし、兄弟は常に再レンダリングされます。これは、あなたの場合はスロット/インデックスとスロット/編集です

ルートに関しては、子を持つ必要があるものはすべてリソースになります。あなたの場合、 host/#/dayshosts/#/dayは両方ともアプリケーションアウトレットにレンダリングされます

于 2013-10-04T18:00:48.713 に答える
2

ここに行きます

script/app/templates/application.handlebars - {{outlet}}
script/app/templates/days.handlebars - template, but it should be a `resource` 
                                       instead of a route, which results in this
script/app/templates/days/index.handlebars - will be rendered on `/days`


script/app/templates/day.handlebars - {{outlet}} inserted into `application` outlet
script/app/templates/day/index.handlebars - inserted into `day` outlet

script/app/templates/slots.handlebars - {{outlet}} inserted into `day` outlet
// this also overwrites `day/index` template, so only one of them 
// can be displayed at once

script/app/templates/slots/index.handlebars - inserted into `slots` outlet
script/app/templates/slot.handlebars - {{outlet}} inserted into `slots` outlet
script/app/templates/slot/index.handlebars - inserted into `slot` outlet
script/app/templates/slot/edit.handlebars - inserted into `slot` outlet

おそらくdaysリソースとしても定義する必要があります

this.resource("days", { path: "/" });

他のルートとの違いはありません。このルートは引き続き機能します。

this.resource("day", { path: "/:day_id" } ...

于 2013-02-05T18:08:15.570 に答える