9

私を悩ませている問題があります。

グリッドがあり、アイテムを dblclick すると、ウィンドウを開いてそのアイテムを編集したいと考えています。かなり標準的なもの。問題は、プログラムを使用している他の人がプログラムを変更したり、削除したりする可能性があるため、記録が最新であることを確認したいということです。

ストアをリロードすることはできますが、特定のレコードを 1 つだけチェックしたいのです...データを取得し、別のレコードを作成して、ストア内の既存のレコードを置き換えるだけだと考えましたが、最善の方法を知りたいです。これをする

この場合(サーバー->クライアント)で更新操作が機能するかどうかはわかりませんが、RESTfulプロキシは私にとってオプションではないことに注意してください。

編集:これは誰かを助けるかもしれません:私がしたことは、データと生のオブジェクトを新しいレコードから古いレコードにコピーしてから、変更を「コミット」することだけでした。私のために働いた。

ありがとうございました。

4

4 に答える 4

5

ExtJS 4.1

私は同様の問題を抱えていましたが、実験として

sStore.load({ id: mskey, addRecords: true });

ここで、mskey は現在ロードされているレコードの uuid です。

最初に(実験として) 既存のレコードを削除せず、同じ ID を持つ既存のレコードをサーバーからの新しいデータで更新しました (モデル --> REST プロキシ経由)。完全!

REST プロキシを使用していないとおっしゃっていたのは承知していますが、これは、トピック名などの検索用語を検索してこの投稿を見つけた他の人に役立つかもしれません (これが私がここにたどり着いた方法です!)

つまり、「addRecords」は追加または更新を意味するようです。

参考までに、マレー

于 2013-04-18T11:17:44.473 に答える
4

このようなことを行う最善の方法は、ウィンドウを開くイベントでレコードをリロードすることです。たとえば、グリッド ストアからウィンドウ内のフォームにレコードをロードする場合、モデルを使用して ID からロードできます。

Item.load(id, { success: function(r) { form.loadRecord(r); } });

保存したら、おそらくグリッド ビューで更新を呼び出す必要があります。これにより、保存イベントからの変更が再描画されます。パフォーマンスが気になる場合は、ストア内の正確なレコードに対してrefreshNode (グリッド ビューのドキュメントを参照) を使用することもできます。

もちろん、これで安静なプロキシを使用する必要はありません。単一のレコードをロードする限り、任意のプロキシを使用できます。

于 2011-06-03T13:08:55.930 に答える
1

ExtJS 4.1 では、オーバーライドは次のとおりです。

CoffeeScript では:

# Adds "reload" to models
Ext.define "Ext.ux.data.Model",

    override: "Ext.data.Model",

    # callBack is called with success:boolean
    reload: (callBack) ->
        Ext.getClass(@).load @getId(),
            success : (r, o) =>
                for k, v of r.data
                    @data[k] = v
                @commit()
                callBack(true) if Ext.isFunction(callBack)

            failure: =>
                callBack(false) if Ext.isFunction(callBack)

JSで(テストしませんでした):

Ext.define("Ext.ux.data.Model", {

    override: "Ext.data.Model",

    reload: function(callBack) {

        var me = this;
        return Ext.getClass(this).load(this.getId(), {
            success: function(r, o) {
                var k;
                for (k in r.data) {
                    me.data[k] = r.data[k];
                }
                me.commit();
                if (Ext.isFunction(callBack)) {
                    callBack(true);
                }
            },
            failure: function() {
                if (Ext.isFunction(callBack)) {
                    callBack(false);
                }
            }
        });
    }
});
于 2013-01-23T10:59:33.903 に答える