3

Backbone コレクションに保存されている Google マップ オブジェクト上の場所のコレクションがあります。

var Location = Backbone.Model.extend({
    defaults: {
        latitute: "",
        longitude: "",
        visited: false;
    },
});

var LocationCollection = Backbone.Collection.extend({
    model: Location,
    url: 'api/locations'
});

マップ上の各ポイントがクリックされると、ロケーション モデル プロパティ「visited」が true に設定されます。

場所の元のコレクションは、(マップの境界に基づいて) データベースから取得されます。このデータベースには、「訪問した」情報は格納されず、単に範囲内の場所のリストが格納されます。

ユーザーが移動、ズームイン/ズームアウトなどによって Google マップの境界を変更した場合、新しいパラメーター内の場所の新しいリストを取得し、このリストを既存のコレクションと同化して、新しい場所を追加する必要があります。訪問したプロパティを既存のプロパティに保持しますか?

これが曖昧すぎないことを願っていますが、どこから始めればよいでしょうか?? jQuery を使用して、複雑なオブジェクトをあるコレクションから別のコレクションにマップする方法はありますか? それとも、コレクションを分割し、訪問した情報をサーバーに送り返し、そこでそれらを結合する方が理にかなっているでしょうか? それとも、バックボーン コレクションは「訪問した」値を記憶し、コレクション内の値のみを新しいプロパティで更新しますか?

申し訳ありませんが、私はこのことを知っていると思っていましたが、このようなことをしたことはありません.

4

1 に答える 1

2

それが可能だ。基本的には以下を想定しています。ユーザーにはたくさんの場所があります。クリックすると、場所の属性がvisited = true;

それらがズームアウトすると、fetch()現在ビューに表示されているが、それらの古い場所をサーバーにリセットしたくない新しいモデルは、visited = false;基本的にビューの寸法を計算し、一連の場所モデルを提供します.

これが必要な場合はfetch()、 options: を使用して呼び出しを行うだけですadd:true

collection.fetch({
    add: true
});

add:trueオプションを呼び出しに渡すfetch()と、コレクションはリセットされません (それにより、アクセスしたデータが消去されます)。代わりに、コレクションにまだ存在しないモデルのみを追加します。したがって、既に location.id = 1, 2, 3 があり、サーバーが location.id = 1, 2, 3, 4, 5, 6 を返す場合 ... 4, 5, 6 のみが既存のコレクションに追加されます。 . 訪問済み = true (または false) の 1、2、3 のデータはそのまま残ります。

于 2012-08-28T19:43:55.940 に答える