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: function () {
    var p = sdk.read_json_file('player.js');
    this.set(this.parse(p), {});
    return this;
}

問題は、フェッチが呼び出されると、リセット イベントが発生し、プレーヤー ビューが更新されようとすることです。プレーヤー ビューは、プレーヤー モデルにプレイリスト オブジェクトが含まれていることを前提としています。技術的にはそうですが、この時点ではまだ Playlist インスタンスに解析されていないため、プレイリストは単なる JavaScript ハッシュです。

ファイルの読み取りから返されたデータに基づいて、モデル内のどこにプレイリスト インスタンスを作成するのか疑問に思っています。

免責事項:Backbonejs初心者

4

1 に答える 1

0

非常に具体的にするのに十分なコンテキストがありませんが、とにかく、Backbone用に別の「アダプター」を作成する場合は、独自のBackbone.syncアダプターを作成し、関連するモデルが使用するsyncメソッドをオーバーライドする必要があります。独自の同期アダプタ。

save / fetchメソッドはBackbone.syncアダプターを呼び出しますが、データが適切に前処理/後処理されることも確認します(parseを呼び出すことにより、渡されたjsonなどから特定のメンバーを設定する以上のことができます)。

localStorage、indexedDB用のBackbone.syncアダプターがあり、おそらくファイルシステムAPI用にもいくつかあります。Googleで最初に行うことは次のとおりです。

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

localStorageとindexedDBのアダプターは正常に使用できましたが、上記でリンクしたアダプターは試していません。

于 2013-02-19T20:26:14.837 に答える