2

Backbone.js を使用してフェッチした後にデータを使用する方法と場所を理解しようとしていますが、少し混乱しています。
状況を説明します。
起動時にサーバーからデータを取得するアプリがあります。3 つの異なる種類のデータ。
飛行機、バイク、車を考えてみましょう。
そのために、3 つのコレクション (Airplanes、Cars、Bikes) 内に、これらのデータを取得する URL を挿入しました。
parse メソッドを上書きしたので、取得した文字列を変更して並べ替え、オブジェクトと localstorage 内に配置できます。これらの 3 つのデータ構造を使用する必要があるため、永続化する必要があります。
したがって、フェッチを使用して、これらすべてのデータを取得し、ローカルストレージに配置します。そのようにするのは正しいですか?

ここで、「最寄りの車を取得する」など、サーバーに対して別の呼び出しを行う必要があります。
ビューでは、車の色、名前、モデルを確認する必要があります。これらの情報はすべて、localstorage のオブジェクト「Cars」内にあります。
私のビュー「showcars.view」では、必要なすべての情報を取得する非バックボーン js (コレクション、モデル、またはビューではない) を呼び出すだけです。このjsで私は:

var carmodel = new Car(); //car is the backbone model of the cars
carmodel.url = '/get/nearest/car'; //that give id of the nearest car
carmodel.fetch ({
       success: function () {}
//here i search the Cars object for a car with the same id 
//and get name, color, model and put them in sessionstorage
})

したがって、その呼び出しの後、ビューで必要なデータをセッションストレージから取得できます。それは物事の悪い方法ですか?もしそうなら、どのようにそれらの情報を取得して分析する必要がありますか? モデル内ですべての呼び出しと操作を行う必要がありますか?
ありがとう

4

2 に答える 2

1

一般に、Backbone はすべてをメモリ (つまり、ブラウザ メモリ) に保持するため、現在のスコープから Collection オブジェクトに何らかの方法で到達できる限り、すべてをローカル ストレージに保存する必要はありません (簡単にするために、これがグローバルwindowスコープだと言います)。

したがって、あなたの場合、3つのコレクションのようなものがあります:

window.Cars
window.Airplanes
window.Bikes

今、あなたは最も近いものが欲しいです。バックボーン ビューにいて、イベントに応答していると仮定すると、代わりに次のようなことを行います (意味のあるコードを表示するだけです)。

var GeneralView = Backbone.View.extend({

    events: { "click .getNearestCar": "_getNearestCar" },

    _getNearestCar: function () {

        $.getJson('/get/nearest/car', function (data) {
            // suppose the data.id is the id of the nearest car
            var nearestCar = window.Cars.get(data.id)
            // do what you plase with nearestCar...
        });
    }

});
于 2013-09-20T09:40:02.897 に答える
1

これは、あなたが望むものを実装する方法です。

var Car = Backbone.Model.extend();
var Cars = Backbone.Collection.extend({
  model: Car,
  url: '.../cars'
});
var NearestCar = Backbone.Model.extend({
  url: '...nearest/car'
});

var cars = new Cars();
var nearestCar = new NeaerestCar();
cars.fetch({
  success: function() {
    nearestCar.fetch({
      success: function(model) {
        var oneYouWant = cars.get(model.get('id'));
        // do something with your car
        // e.g.:
        // var carView = new CarView({model: oneYouWant});
        // $('body').append(carView.render().el);
      });
    });
  });
});
于 2013-09-20T09:39:27.987 に答える