13

これは、答えがイエスであることを示唆しているようです:

Ember Pre1 から Pre4 へ: ルートごとに複数の動的セグメント? 更新: 動的セグメントで許可されている構文は何ですか?

……ただ、確認したいだけです。

私の場合、学習課題として、月ごとに表示されるカレンダーを Ember で作成しています。特定の月から前の月、および次の月にリンクできるようにする必要があります。

だから私はできるようになりたいです

{{ linkTo calendar_month year month }}

this.transitionTo('calendarMonth', year, month)

ネストされたリソースを使用せずにこれが実現可能かどうか疑問に思っています。次のようなもので動作させることができます:

App.Router.map(function() {
  this.resource("year", { path: "calendar/:year" }, function() {
    this.resource("calendar_month", { path: "/:month" }, function() {
      this.route('index');
    });
  });
});

...しかし、これには、モデリングの観点からは実際には存在する必要のない Year オブジェクトの導入が含まれます。これは、linkTo でその ID を使用できるようにするためです。

2 つのパラメーター/動的セグメントを使用してルートを設定したいと思います。

App.Router.map(function() {
  this.route('calendar_month', { path: 'calendar/:year/:month'});
});

しかし、これは不可能であるというのは正しいですか?私はこれを可能な限り最もクリーンで魅力的な方法で行っていることを確認したいだけです.

別の言い方をすれば:

「ユーザーインターフェイスがネストされている場合、ルートもネストする必要がある」というこの概念は理解していますが、URL がネストされている場合、これは必ずしもインターフェイスもネストされることを意味するわけではありません。だから私は疑問に思っています:私のURLがネストされている場合、対応するネストされたモデルを構築するのが常にベストプラクティスですか?

ガイダンス/説明は大歓迎です。

ありがとう、

4

1 に答える 1

17

私はあなたが参照した質問の質問者ですので、ここで答えます。これは完全に可能であるという質問をすでに更新しました。

あなたのアプローチはうまくいくはずです:

App.Router.map(function() {
  this.route('calendar_month', { path: 'calendar/:year/:month'});
});

追加する必要があるのは、シリアライズとモデル フックの実装だけです。

serialize: function(context){
    // i assume that you wrap year and month in an Object (maybe App.YearAndMonthObject)
    var ret = {
        year : context.get("year"),
        month : context.get("month")
    };
    return ret;
},
model : function(params){
    //somehow create your object from the params
    var model = App.YearAndMonthObject.create({
        year : params.year,
        month : params.month
    });
    return model;
}

これには、linkTo の使用に関する変更も必要です。

{{ linkTo calendar_month year month }}

...代わりに、次を使用します。

{{ linkTo calendar_month yearAndMonth }}

これはこれに対処するための大胆な方法だと思います。

まとめ: では、ルートとは何でしょうか?

これらは懸念事項を分離するために使用されます。そして、あなたの場合、その年と月は同じ懸念 (=route) の一部です。したがって、それらは新しい Ember オブジェクトにラップされ、ルート (CalendarMonthRoute) はこの新しいオブジェクト (おそらく YearAndMonthObject または CalendarMonthObject?) を処理する必要があります。

于 2013-03-02T12:58:32.917 に答える