14

Ember アプリケーションに次のルートがあるとします。

App.Router.map(function() {
  this.resource('series', function() {
    this.resource('serie', { path: '/:serie_id' }, function() {
      this.resource('seasons', function() {
        this.resource('season', { path: '/:season_id' }, function() {
          this.resource('episodes', function() {
            this.resource('episode', { path: '/:episode_id' });
          })
        });
      });
    });
  });
});

Handlebars が提供するヘルパーを使用して特定のエピソードにリンクするにはどうすればよいですか? linkTo言い換えると、Ember は URL の他のパラメーター、つまり と がどうあるべきかをどのように判断しserie_idますepisode_idか? ドキュメントには、以下に示すようepisodeにモデルをepisodeルートに渡す必要があると記載されています。

{{#linkTo "episode" episode}}

これは、次の URL 構造にリンクするためのものです。

/series/:serie_id/seasons/:season_id/episodes/:episode_id/

そのようなヘルパーを使用するlinkToと、Ember は on で呼び出すことができないというエラーをスローgetidますundefined。モデルを使用してandがepisode何であるかを把握していると思いますが、Ember がこれらの を見つけるには、モデルが特定の規則 (構造または設計図) に準拠する必要があると推測します。serie_idepisode_idid

これらは、私が Ember で最も難しいと思う側面です。Ember をデバッグ モードで使用しても、あまり透過的ではありません。ポインタや参照は大歓迎です。

serialize更新 1: 掘り下げた結果、ルートのメソッドがこれを達成するための重要な要素であることがわかりました。しかし、linkTo上の図のようにヘルパーを使用すると、ルートのserializeメソッドに渡されるモデルがundefined何らかの理由で (ヘルパーに渡されたときではないにもかかわらず) ですlinkTo。この発見につながった質問は、こちらにあります。

serieSeason更新 2: リンクが生成されたときに、ルートのserializeメソッドが間違ったモデル (シーズンではなくエピソード) を受け取ることが判明しました。ただし、なぜ間違ったモデルを受け取っているのかは明らかではありません。メソッドのmodelパラメータはどこから来ますか?serialize

更新 3:関連する各ルートlinkToのメソッドから静的データを返すと、ヘルパーは正常に動作します。これは、ヘルパーが問題に関与していないことを意味します。serializelinkTo

4

1 に答える 1

24

その答えは、適切に文書化された Ember のソースにあることがわかりました。これは、Web を数日間検索した後に行うことだからです。

答えは簡単です。ヘルパーは複数のモデルを受け入れますlinkToリンク先 URL の動的セグメントごとに、対応するモデルを渡します。渡された各モデルは、宛先 URL の対応するルートのモデルになります。上で説明した例では、これにより次の結果が得られます。

{{#linkTo "episode" serie season episode}}

モデルはルートに、モデルはルートに、モデルはルートserieに渡されます。多くの開発者を混乱させているのは、ヘルパーを使用するとルートのフックがトリガーされないことです。開発者が 1 つ以上のモデル (またはゼロ) を渡すことによって、対応するルートのモデルを提供する (または提供できる) ことを理解していれば、これはそれほど驚くべきことではありません。serieseasonseasonepisodeepisodemodellinkTo

深くネストされたリソースに関するドキュメントはあまりないため、linkToヘルパーが内部でどのように仕事をしているのかを知るのは簡単ではありませんでした。Ember のソースに飛び込むことは、フレームワークに慣れるのに確実に役立ちます。

于 2013-08-03T18:37:08.657 に答える