2

さまざまなタイプの検索結果を取得する検索ページがあります。使いたい検索結果一覧で

{{#linkTo 'someResources.someResource' result}}{{result.Name}}{{/linkTo}}

ルートsomeResources.someResourceでは、検索ページとはまったく異なるモデルを使用したいと考えています。それ、どうやったら出来るの?のリンクをクリックするとlinkTo、モデルが再度読み込まれず、代わりにresultここで名前が付けられたモデルを使用しようとします。

だから私がしたいのはsomeResources.someResource、 の値に基づいてナビゲートするときにモデルをリロードすることresultです。

名前の付いたモデルApp.SomeResourceと、そのページに直接アクセスすると機能する find メソッドがあります。

4

2 に答える 2

2

問題は、指定されたモデルを使用しているため、移行を行うときにモデルを完全にリロードする必要があるlinkToことです。この問題の解決策は実際には非常に簡単aです。代わりに通常の html タグを使用するだけです。私がやったことはこれでした:

<a {{bindAttr href="somePropertyInYourModel"}}>{{someTextProperty}}</a>

プロパティsomePropertyInYourModelは、新しいページへの URL を含むプロパティです。URLがemberルートにある場合、アドレスバーにそのアドレスを入力してEnterキーを押すのと同じようになりますが、ページの完全なリロードはありません.

これは ember で改善できることだと思います。

{{#linkToRoute "resourceA.routeB" params="val1,val2,val3"}}Go here{{/linkToRoute}}

このルートが設定されているとします:

App.Router.map(function() {
    this.resource("resourceA", {{path: "/resourceA"}}, function() {
        this.route("routeB", {{path: "/:prop1/:prop2/:prop3");
    }
});

私は取得したい:

<a href="#/resourceA/val1/val2/val3">Go here</a>

問題の順序。val1,val2,val3順序が変更された場合は、最終的な URL でも変更する必要があります。

于 2013-07-11T06:25:37.600 に答える
2

あなたが発見したように、Emberはmodel()使用時にフックをバイパスします。linkToモデルを渡したことが想定されているため、それは that( result) を として使用しmodelます。

次に使用できるフックはsetupController. 直接ルートで動作するフックがあるのでmodel、ここから直接呼び出すことができます。

1 つの注意点は、モデルが既に読み込まれている場所への直接ルートの読み込みも許可する必要があることです。

setupController: function(controller, model) {
  if (!model.isModel) {
    this.model().then(function(result)) {
      controller.set('model', result)
    }
  }
}

model.isModelこのチェックは、直接ロードされたモデルの isModel プロパティを介して行われますlinkTo

Promise注: 上記のコードは、model()フックでa を返すことを前提としています。

于 2013-07-10T11:07:36.903 に答える