私の質問のサンプルコードはこちらです。デフォルトで TextField を含む SearchView を表示するシンプルな Ember アプリです。
ユーザーがテキストを入力して Enter キーを押すと、テキスト ボックスに入力された値を渡して別の状態 (displayUserProfile) に遷移したいと考えています。
最初に、Textbox のinsertNewlineコールバックで、アプリケーションのルーターのtransitionToメソッドを呼び出し、値をパラメーター オブジェクトの一部として渡します。
App.SearchTextFieldView = Em.TextField.extend({
insertNewline: function() {
App.router.transitionTo('displayUserProfile', {
username: this.get('value')
});
}
});
それはうまくいきますが、無限スクロールに関する質問に対するパングラッツの答えは、別のアプローチを使用していることに気付きました。代わりに、ビューのコントローラーでメソッドを呼び出し、コントローラーのターゲット (ルーター) でメソッドを呼び出します。
これにより、コードが次のように変更されます。
App.SearchTextFieldView = Em.TextField.extend({
insertNewline: function() {
Em.tryInvoke(this.get('controller'), 'displayUserProfile', this.get('value').w());
}
});
App.SearchController = Em.Object.extend({
displayUserProfile: function(username) {
this.get('target').transitionTo('displayUserProfile', {
username: username
});
}
});
私の質問は次のとおりです。どちらのアプローチが優れていますか? ビューから直接transitionToを呼び出すか、ビューのコントローラーに委譲しますか?