2013-09-20 3 views
2

Я пытаюсь понять, как и где использовать данные после извлечения с использованием Backbone.js, но я немного смущен.
Я объясню ситуацию.
У меня есть приложение, которое при запуске получает некоторые данные с сервера. Три разных типа данных.
Предположим, что самолеты, велосипеды, автомобили.
Чтобы сделать это, я вставил в три коллекции («Самолеты, автомобили, велосипеды») адрес, где можно получить эти данные.
Я перезаписал метод parse, поэтому я могу изменить строку, которую я получаю, заказать и поместить в объект и внутри localstorage. Мне нужно, чтобы это было постоянным, потому что мне нужно использовать эти 3 структуры данных.
Итак, с помощью fetch я получаю все эти данные и помещаю их в localstorage. Правильно ли это так?
Правильный способ извлечения и извлечения данных в Backbone.js

Теперь мне нужно сделать другие звонки на сервер, например «получить ближайший автомобиль».
В представлении мне нужно увидеть цвет, имя и модель автомобиля, все, что информация находится внутри объекта «Автомобили» в localstorage.
На мой взгляд, «showcars.view» Я просто называю non-backbone 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 
}) 

Таким образом, после этого разговора, по мнению я могу получить нужные данные из sessionstorage. Это плохой способ делать что-то? Если да, то как я должен получать и анализировать эти данные? Я должен делать все вызовы и операции внутри моделей?
Thanks

+0

Почему вы Actaully использовать локальное хранилище на всех? Он должен использоваться для поддержания состояния приложения после перезагрузки страницы. Вам не нужно хранить что-либо в локальном хранилище, оно уже доступно и доступно в вашем приложении. –

+0

Магистраль предоставляет вам базовые операции CRUD в стиле RESTful. Однако вы можете свободно создавать свои собственные операции синхронизации (как в случае синхронизации с сервером), как вы считаете нужным. Это также очень легко расширить магистраль. Так что я пытаюсь сказать, что ваш '/ get/ближайшее/автомобиль' - это не настоящая операция RESTful, и я думаю, что вручную установить« url »и снова вызвать fetch - это не совсем правильный подход. – j03w

ответ

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); 
     }); 
    }); 
    }); 
}); 
1

В общем, Backbone держит все в памяти (то есть, в памяти браузера), поэтому нет необходимости сохранять все в локальное хранилище, до тех пор, как ваш объект Collection является каким-то образом добраться из сферы вы сидите в (чтобы все было просто, скажем, это глобальная область window).

Так что в вашем случае я буду иметь что-то вроде трех коллекций:

window.Cars 
window.Airplanes 
window.Bikes 

Теперь вы хотите ближайший. Предполагая, что вы находитесь в Backbone View и реагируют на события, на вашем месте я бы сделал что-то вроде этого (как раз показывает смысл код):

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... 
     }); 
    } 

}); 
+0

'click getNearestCar' должен быть' click .getNearestCar' или 'click # getNearestCar' :) –

+0

Исправлено! благодаря :) – Tallmaris

Смежные вопросы