2017-12-17 11 views
2

クエリパラメータが変更された場合、モデルを更新するためにrouteにqueryParam設定を設定しました。ただし、クエリのパラメータが変更された場合、setupControllerは呼び出されません。なぜこれが起こっているのか?クエリの変更Paramがルートを更新しない

export default Route.extend({ 
    queryParams: { 
    id: { 
     refreshModel: true 
    } 
    }, 

    model() { 
    // Returning a new array/object/value everytime the hook is called, causes the 
    // setupController hook to be called. 
    return []; 
    } 

    setupController(controller) { 
    controller.start(); // fetches data synchronously from api 
    } 
}); 

答えて

3

refreshModelを返信するのをalptugdする

export default Route.extend({ 
    queryParams: { 
    id: { 
     refreshModel: true 
    } 
    }, 

    setupController(controller) { 
    controller.start(); // fetches data synchronously from api 
    } 
}); 

//ソリューションのおかげでrefreshに、あなたが実行するためのbeforeModelmodelafterModel、およびsetupControllerフックを期待するべきであると予想としてルートを強制します。しかしながら; setupControllerフックのマイナー違いがあります:

は、エンバーのroute.jssource coderelevant API documentation中のrefresh方法についてのコメントを見てみましょう。どちらが言う:。

は、「他のルートからの移行時にルートが入力されている方法と同様の方法でbeforeModelmodel、およびafterModelフックを発射、このルートとその子のルート上のモデルを更新し、現在のルートのparams(たとえば、 article_id)がそれぞれのモデルフックに渡され、別のモデルが返された場合は、setupControllerと関連するルートフックも再起動します。

これは、 refreshが発生した場合にsetupControllerがトリガーするためには、別のモデルをmodelフックから返す必要があります。あなたの場合;モデルはありませんhook;したがってパラメータ値の変更時にはsetupControllerは呼び出されません。

ところで、 modelプロパティをcontrollerに保存することが唯一の目的であるため、setupControllerフックをオーバーライドする場合は、スーパーメソッドを呼び出すことをお勧めします。この場合の詳細な説明はAPIをご覧ください。

+0

ありがとうございます!モデルフックから空の配列を返すと、呼び出されるたびにモデルフックが異なる値を返し、setupControllerが呼び出されました。出来た!私たちは一見ぼんやりしているので、ここでは冗長な最適化を行っているようですが。 Btw、コントローラーでモデルを同期して設定しているので、私は意図的にスーパーに電話していません。 – dorindo

+1

あなたのために働くことができてうれしいです。 「コントローラで同期してモデルを設定しています」あなたが何をしているのか分かっていればOKです。 Emberは時々厄介なことがあります。さらなる問題を防ぐために警告したかっただけです。がんばろう。ちなみにアップ票に感謝します。 – alptugd

関連する問題