1

現在、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()方法は正しいですか?

前もって感謝します!

4

1 に答える 1

1

同様の問題があり、ルート オブジェクトを削除することになりました。ルートは、URL パラメーターにアクセスしている場合にのみ意味があります。MyModelRoute は params にアクセスしないので、削除してください。「init」メソッド内でコントローラーを初期化することもできます。

「/my_model/fromDate/toDate」などのように、パス内でクエリをエンコードしている場合は状況が異なります。私はそれを必要としませんでしたが。だから私はコントローラーですべてを処理しています。

于 2013-05-03T16:25:39.023 に答える