3

私はローカル Backbone.js アプリを実行しており、data という名前のローカル フォルダーを使用して初期データを配置しています。また、Backbone.router では、次のように ajax を使用して初期データを取得します。

p = $.ajax({
        url: 'data/todolist.json',
        dataType: 'json',
        data: {},
        success: function(data) {
            var approuter = new AppRouter({data: data});
            Backbone.history.start();
        }
    })

そして、initialize私の方法はAppRouter次のとおりです。

initialize: function(options){
        this._data = options.data;
        this._todos = new TodosCollection(options.data);
        this._length = this._todos.length;
        this._index = new CategoriesView({collection: this._todos});
    },

私のアプリでは、Backbone.View 内の項目を作成、削除、更新するたびにthis.model.destroy()this.collection.add()またはthis.model.set()を使用してモデルとコレクションを更新します。しかし、これらの変更が初期データ (上記の「todolist.json」) に保存されていないようです。ページ全体を更新すると、アプリにはまだ初期データが表示されます。私がやりたいことは、ビューで何らかの変更が発生するたびにデータ ファイルが更新されることです。では、どうすればこれを達成できますか?

もう 1 つの質問: localStorage を使用してこれらのデータを保持したい場合はどうすればよいですか? ルーターで ajax 呼び出しを使用する必要はありませんか? Backbone.Collection.fetch()最初にRouterのメソッドでメソッドを使用するだけinitializeで、アプリが開始された後、 localStorage を使用するたびにデータが自動的に更新されますthis.model.destroy()this.collection.add()またはthis.model.set()?

4

1 に答える 1

0

変更したデータを.jsonファイルに書き戻しますか、それとも.jsonファイルを初期データとして使用し、その後、永続性のためにLocal Storage / IndexedDB / Web SQL / ...を使用しますか?とにかく、Backboneはかなり軽量であり、これらの機能のいずれもすぐにサポートされていません。これを自分で書くか、これを行うプラグインを見つける必要があります。

ローカルファイルへの書き込みは、 FileSystem APIを使用するHTML5アプリで可能であるはずですが、すべてのブラウザーで機能させるのは難しい場合があります。さらに、ファイルシステムの特別なサンドボックス化されたセクションでのみファイルの読み取り/書き込みを行うことができます。

ローカルストレージについては、backbone-localstorage.jsプラグインをご覧ください。Backboneに含まれているTodoサンプルアプリもこのプラグインを使用しています。基本的に、モデルのフェッチメソッドと同期メソッドをオーバーライドする必要があります。

于 2012-05-04T06:38:43.420 に答える