Локальное хранилище Backbone.js, загрузка с сервера авансом - PullRequest
4 голосов
/ 05 декабря 2011

Я пытаюсь создать мобильное приложение, используя backbone.js, который будет:

  1. Загрузить список элементов с сервера при первом запуске
  2. Зафиксировать их в LocalХранилище (я использую backbone-localstorage.js)
  3. Возможность сохранять элементы списка в качестве избранного, сохраняя их в локальном хранилище

Приложение никогда не будет фиксировать изменения данныхна сервер, но работаю только с локальным хранилищем.

Я загружаю данные с сервера вручную и заполняю коллекцию, все работает нормально только из-за того, что я не могу перенести данные в локальное хранилище.

Я бьюсь головой о стену, пытаясь заставить это работать.Любые идеи о том, как решить это высоко ценится.Все примеры, которые я видел, либо фиксируются на сервере, либо являются чисто локальным хранилищем.

1 Ответ

5 голосов
/ 05 декабря 2011

Небольшой пример кода будет полезен.

Я не уверен, как вы загружаете список элементов с сервера при первом запуске, если у вас работает локальное хранилище, но я бы, вероятно, собрал его вместе.

ОЧЕНЬ ПРОСТОЙ способ сделать это, если вам никогда не нужно возвращаться на сервер для обновления каких-либо моделей во время работы приложения, это просто доставлять модели с сервера, встроенного в приложение, и загружать их при создании Ваша коллекция:

foo = new MyCollection(myJSONthatContainsAllTheModels)

Для получения дополнительной информации см. Начальная загрузка в Основных документах.

Если вам необходимо периодически обновлять с сервера приложение, то ..

Использование backbone-localstorage, как, с одним изменением. Это означает, что он будет переопределять метод синхронизации и любые обычные функции «выборки», «сохранения» и т. Д. Будут манипулировать локальным хранилищем. Изменение будет состоять в том, чтобы скопировать исходный Backbone.Sync в новую функцию, называемую что-то вроде Backbone.ServerSync, прежде чем заменить Backbone.Sync версией LocalStorage. Это сохраняет синхронизацию REST.

Затем я бы расширил Backbone.Collection новой функцией, которая используется для извлечения данных с сервера, используя вашу функцию Backbone.ServerSync.

Это не похоже на то, что backbone-localstorage мешает свойствам URL коллекций, поэтому вы должны быть в состоянии сделать это довольно легко.

Эта новая функция сбора, которая называется, скажем, serverfetch для ясности, будет более или менее клоном fetch, но с использованием вашего метода Backbone.ServerSync вместо Backbone.Sync.

После того, как он получит ответ от сервера и проанализирует его, он вызовет add для каждой модели, которая должна зафиксировать их в локальном хранилище.

...