2013-02-19 2 views
0

Я использую Backbonejs для создания приложения в тире. Некоторые из моих моделей сохраняются на сервере с использованием HTTP, а другие сохраняются в локальной файловой системе, доступной только через функции чтения/записи.Анализ данных модели в Backbonejs, который включает подмодели

Мой вопрос касается тех, которые я сохраняю в файловой системе, хотя это может быть применимо к любому сценарию.

Модель My Player, которая, как вы, возможно, догадались, обрабатывает воспроизведение звука, содержит объект Playlist. Когда приложение закрыто, я сохраняю текущее состояние игрока в файловой системе, чтобы его можно было возобновить при следующем запуске.

save: function() { 
    sdk.write_json_file('player.json', this.toJSON()); 
} 

Я вижу, что toJSON автоматически также призывает toJSON для содержащихся моделей, в результате чего хранящегося JSON, который выглядит примерно так:

{ 
    'playing':true, 
    'playlist_i': 2 
    'playlist':[ 
     { 
      'stream_url': 'http://my.stream.com/blah', 
      'title': 'Title goes here', 
      'artist': 'Artist goes here', 
      ...& other metadata 
     }, 
     ...and so on 
    ] 
} 

Итак у меня перекрытые выборок функции:

fetch: function() { 
    var p = sdk.read_json_file('player.js'); 
    this.set(this.parse(p), {}); 
    return this; 
} 

Теперь проблема заключается в том, что после вызова fetch возникает событие сброса и попытка просмотра плеера обновляется. В представлении игрока предполагается, что модель игрока содержит объект списка воспроизведения. Технически это так, но в этот момент плейлист - это просто хэш-код JavaScript, поскольку он еще не был проанализирован в экземпляре Playlist.

Мне интересно, где бы я создал экземпляр списка воспроизведения в модели на основе данных, возвращаемых из прочитанного файла.

Отказ от ответственности: Backbonejs нуб

ответ

0

У меня нет достаточного контекста, чтобы попытаться быть очень конкретным, но в любом случае, если вы хотите, чтобы написать еще один «адаптер» для магистральной сети, вероятно, вы должны сделать свой собственный адаптер Backbone.sync , и переопределить метод синхронизации для соответствующих моделей для использования вашего собственного адаптера синхронизации.

Способы save/fetch вызывают в адаптер Backbone.sync, но они также гарантируют правильную обработку данных перед обработкой (путем вызова parse, что позволяет вам делать больше, чем просто устанавливать определенные элементы из переданного json или похожие).

Существуют адаптеры Backbone.sync для localStorage, indexedDB и, возможно, некоторые из них также для API-интерфейсов файловой системы. Первое, на Google является:

https://github.com/scotthovestadt/Backbone.fileSystem

я успешно использовал адаптеры для LocalStorage и IndexedDB, но не пробовал один я связан выше себя.