15

Sencha Touch データストアと localproxy に問題があります。基本的に、store.remove(record) メソッドを使用してレコードがストアから削除されると、レコード自体はメモリから削除されますが、ストア内のレコードへの Id 参照は削除されないため、ページが更新されると、素敵な「Uncaught TypeError: Cannot read property 'isModel' of undefined」を受け取ります

ストアのコードは次のとおりです。

Ext.define("App.store.Data", {
    extend: "Ext.data.Store",
    requires: "Ext.data.proxy.LocalStorage",
    config: {
        model: "App.model.Data",
        autoSync: true,
        proxy: {
            type: 'localstorage',
            id: 'app-store'
        }
    }
});

データ エディター ページの削除ボタンのコードは次のとおりです。

onDeleteHomeworkCommand: function () {

    var dataEditor = this.getDataEditor();
    var currentData = dataEditor.getRecord();
    var dataStore = Ext.getStore("Data");

    dataStore.remove(currentData);
    dataStore.sync();

    this.activateDataList();
},

編集:

remove メソッドが呼び出される前のデータ ストアのスクリーンショットを次に示します。 ここに画像の説明を入力

そして、これが次の1つです。 ここに画像の説明を入力

Id がまだストアのリストに残っていることに注意してください。これにより、ページが更新されたときに未定義のエラーが発生します。

4

2 に答える 2

5

問題は、レコードを削除しても、ローカル ストア プロキシが内部 ID リストから ID を削除しないことです。destroy() を使用してプロキシ内のレコードを明示的に破棄すると、これを解決できます。

于 2012-09-10T12:44:51.403 に答える
1

localstorageこれは、プロキシとstoressencha touchの既知の問題の一種であり、デフォルトでは sencha はID を intと見なし、そうでない場合に問題が発生するために発生します。sencha フォーラムの 1 つでこの問題の解決策を見つけたところ、うまくいきました。
これはそのスレッドへのリンクですhttp://www.sencha.com/forum/showthread.php?151741-remove-record-from- localstorage
と解決策は、sencha touch のソース内のコード行を編集することです。

そして今、IDがクリーンアップされないという問題を修正しました。

Int を返す getID の使用がありますが、ID のリストは文字列の配列です

//This line doesn't work circa 32196
Ext.Array.remove(newIds, records[i].getId());

//Replace it with this one works fine.
Ext.Array.remove(ids, records[i].getId().toString());

これは、私のモデルが 'int' 型の 'id' を使用していることが原因である可能性があります。

于 2012-09-03T13:19:24.680 に答える