0

我正在使用 Backbonejs 构建仪表板车辆应用程序。我的一些模型使用 HTTP 持久化回服务器,而其他模型则持久化到本地文件系统,只能通过框架的读/写函数访问。

我的问题专门针对那些我坚持到文件系统的问题,尽管它可能适用于任何一种情况。

我的 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 函数:

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

现在的问题是,一旦调用 fetch ,重置事件就会触发并且我的播放器视图会尝试更新。播放器视图假设播放器模型包含一个播放列表对象。从技术上讲,它确实如此,但此时播放列表只是一个 JavaScript 哈希,因为它尚未被解析为 Playlist 实例。

我想知道根据读取的文件返回的数据,我将在模型中的何处创建播放列表实例。

免责声明:Backbonejs 菜鸟

4

1 回答 1

0

我没有足够的上下文来尝试非常具体,但是无论如何,如果您想为 Backbone 编写另一个“适配器”,您可能应该制作自己的 Backbone.sync 适配器,并覆盖同步方法以供相关模型使用你自己的同步适配器。

save/fetch 方法调用 Backbone.sync 适配器,但它们也确保数据得到正确的前/后处理(通过调用 parse,它允许您做的不仅仅是从传递的 json 或类似物中设置特定成员)。

有用于 localStorage、indexedDB 的 Backbone.sync 适配器,可能还有一些用于文件系统 API 的适配器。谷歌上的第一件事是:

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

我已经成功地使用了 localStorage 和 indexedDB 的适配器,但还没有尝试过我自己上面链接的那个。

于 2013-02-19T20:26:14.837 回答