-1

だから今、私はfindAllを使用してデータにアクセスしています: 'GET api.php/stores-for-you?pid=977&sid=5938&max_fav=3&max_reco=3' これは、pidがページであるアプリケーションのAPIにアクセスする方法ですid および sid はセクション ID です。したがって、各ページには異なる pid と sid があります。そのため、今のところ、API呼び出しごとにfindall呼び出しを行う必要がありますが、これは適切なオプションではありません。

ここでFindallと一緒にfindoneを使用できるかどうかを考えていました。ここで、特定の store-for-you への API にアクセスし、findone を使用して特定の URL にパラメーターをヒットできます。

誰でも私を助けることができますか?質問がまだ明確でない場合は、返信していただけないでしょうか。詳しく説明します。

4

1 に答える 1

1

findAll では、ページ ID とセクション ID を GET 文字列にハードコーディングしないでください。can.Model がそのページだけに固有のものになるためです。findAll を呼び出すコードは、それらを提供する必要があります。

can.Model サブクラスは、サーバーから取得するデータのタイプを表します。findAll は、そのタイプのオブジェクトをいくつか取得するためのものです。あなたの GET 文字列は店舗を返したいようです。モデルを WebStore と呼ぶことができます (「ストア」という言葉は CanJS では意味が異なるため、使用を避けています)。

can.Model.extend("WebStore", {
  findAll : "GET /api.php/stores-for-you?max_fav=3&max_reco=3"
}, {});

findAll のこの仕様では、いくつかのページング キー (max_fav と max_reco は結果リミッターのようです) を残しているので、他のコードが来て一度に 3000 件の結果を要求することはできません。ただし、他のものは特定のページ用です。それらは事実上クエリです。それらをfindAll仕様に入れると、モデルはそのページしか取得できず、再利用性が制限されます。

したがって、他のコードでは、おそらくコントローラーのプロトタイプ init():

var ws_ajax = WebStore.findAll({ pid : 977, sid : 5938 });
ws_ajax.done(function(stores) {
  //Handle the array of 0-3 stores returned from the server. 
});

したがって、異なる pid および sid 値で同じ呼び出しを行うだけで、後で他のコードで他のページやセクションを呼び出すことができます。別のページで findOne をハックする必要はありません。

ただし...何らかの理由でその特定のページ/セクションの組み合わせを頻繁に使用する場合は、WebStore モデルの静的プロパティで別の関数を使用することを検討すると、次のようになります。

can.Model.extend("WebStore", {
  findAll : "GET /api.php/stores-for-you?max_fav=3&max_reco=3",

  findMyPage : function() {
    return this.findAll({ pid : 977, sid : 5938 });
  }
}, {});

CanJS では findMyPage は特別な意味を持たないことに注意してください。頻繁に使用される値で findAll をラップするだけで、それらの値が変更された場合に過度の入力とメンテナンスの頭痛の種を節約できます。

読者に残された課題は、他のページを見つける「findMyOtherPage」を実装することです。

編集:リクエストに応じて詳細が追加されました。

于 2013-12-24T16:59:48.730 に答える