現在、ember-data と RESTAdapter を使用してサービスと通信する ember.js アプリに取り組んでいます。
必要な ember-data モデルを定義し、すべてが正常に機能しているように見えますが、正しい方向に進んでいるかどうかはよくわかりません。したがって、これは「その解決策は大丈夫ですか?」という質問になります。
当社のサービス API は、要求された時間枠に限定されたレコードを取得する方法を提供します。REST 要求パラメーターは次のようになります。
{ from: ..., to: ... }
UI のユーザーは時間枠を選択できる必要があり、UI は要求された時間枠内でデータを更新する必要があります。
今のところ書き込み操作はありません。これは読み取り専用の UI です。
これが私の現在の解決策です:
リクエスト結果のモデルを提供するルート クラスと、UI を提供する ArrayController を定義しました。
ルート クラス コード:
MyModelRoute = Ember.Route.extend
model: ->
# Calling controller to get the required parameters for the initial
# model setup - this doesn't feel right too, but I want to keep the
# time frame parameters for the JSON request at one position (controller)...
controller = @controllerFor('my_models')
# get fromDate and toDate from controller
MyModel.find({from: fromDate, to: toDate})
ArrayController コード:
MyModelController = Ember.ArrayController.extend
updateMyModels: ->
# ... some boring code to get fromDate and toDate ...
# Overwriting the content property which was previously set by
# route's model property seems to be nasty...
myModels = MyModel.find({from: fromDate, to: toDate})
myModels.one('didLoad', =>
@set('content', myModels)
)
私のビューには 2 つの日付ピッカーが用意されており、ユーザーは見たい時間枠を指定できます (fromDate
およびtoDate
サンプル コードで)。
ユーザーが新しい時間枠を選択するたびに、コントローラーで観測された 2 つの変数が更新され、ユーザーが要求した時間枠 (updateMyModels()
サンプルのメソッド) でサーバーに新しい要求が発生します。
つまり、ここに私のポイントがあります:ご覧のとおり、現在、UI タイムフレーム プロパティにバインドされているコントローラーのメソッド内で ArrayController の「コンテンツ」プロパティを更新updateMyModels()
しています。以前に提供されたルートのモデルを完全に無視しています。したがって、私のルートのモデル プロパティは、コントローラーを「初期化」するために存在するだけで、少し奇妙に思えます...
すべてが正常に機能しますが、それを行うためのより良い/正しい方法があるかどうか疑問に思っていますか?
コントローラープロパティの代わりにルートによって提供されるモデルを使用する必要がある場合: コントローラーからルートのモデルと通信する方法はありますか (方法があると確信しています;-))、さらに重要: リロードするにはどうすればよいですか?私のコントローラーからの現在のルート?そのtransitionTo()
方法は正しいですか?
前もって感謝します!