3

私が見つけたチュートリアルとガイドは、Ember.js モデルが非常にデータ中心であることを示唆しています。つまり、サーバーに永続化されたデータがブラウザーにあり、モデルがサーバーからのデータで満たされているということです。

もっと動詞中心のものはどうですか?たとえば、私の場合は、これまでのところ、検索にクエリ、状態 (「beforesearch」、「duringsearch」など)、およびできればいくつかの結果がある「検索」モデルがあります。検索を「runQuery」にして、サーバーに ajax リクエストを送信し、モデルを返して結果を入力し、その状態を「aftersearch」に変更します。

モデルでそのような動詞を処理する最良の方法は何ですか? 「runQuery」は ember-data 経由で送信する必要がありますか、それとも $.ajax などを使用して手動で起動する必要がありますか? モデルについて間違った方法で考えているのでしょうか。これは実際にはコントローラーを経由する必要がありますか?

編集:RESTについて少し読んだ後、私が望んでいるのは「コントローラー」リソースにPOSTすることだと思います。たとえば、次のようになります。

POST: /searches (検索を作成するため)

POST: /searches/1/run (検索 1 の「実行」コントローラーを実行するため)

Ember.js / ember-data には、このようなコントローラー リソースを呼び出す推奨される方法はありますか?

4

1 に答える 1

3

Ember-data は、さまざまな情報フィールドと関係を含み、一意の ID によって定義されるモデル オブジェクトを使用することに非常に重点を置いています。私のAPIの半分はember-dataが期待するものであり、半分はあなたが説明したようなものです.IDを持つデータオブジェクトの作成/取得/更新/削除よりも、データ処理または計算の実行に関するものです。これらの計算を同じように扱い、ID を割り当ててデータベースに永続化するのは意味がありません。

私の場合、ember-data スタイルのデータ オブジェクトと計算機能の両方があるため、ember-data とカスタム ajax リクエストを組み合わせて使用​​します。ember-data によって取得されるリレーショナル データが格納されていますが、モデルを拡張して計算部分へのアクセスを含めます。

例えば:

App.Event = DS.Model.extend({
  name: DS.attr('string'),
  items: DS.hasMany('App.Item'),
  ...etc...

  searchData: null,
  searchInEvent: function(data) {
    var _this = this;
    return $.ajax({
      url: "/api/events/" + this.get('id') + "/search/",
      dataType: 'json',
      type: 'POST',
      data: data
    }).then(function(result){
      _this.set('searchData', result);
    });
  }
});

App.Eventは通常の ember データ モデルであり、通常の ember 規則に従ってルーターによってロードされます。さまざまなコントローラーが検索機能にアクセスする必要があるため、検索機能を介してアクセスできsearchInEventsearchDataモデルに追加されました。

于 2013-03-23T13:35:28.910 に答える