3

次のような状況があります。サーバーと同期されている TreeStore があります。サーバーの応答は、追加のプロパティ「additionalTask​​s」(サーバーが生成した新しいノードの情報を格納する) を含む変更されたノード データを返します。ストアのすべてのリスナーが生の応答データではなく、インスタンス化されたレコード オブジェクトを既に取得している場合、このプロパティの値を取得するにはどうすればよいですか? この追加フィールドをモデルに追加しようとしましたが、リスナー関数のレコードの値を確認すると、null として表示されます。

    Ext.define('ExtendedTask', {
        extend: 'Ext.data.NodeInterface',
        fields: [
            { name : 'additionalData', type : 'auto', defaultValue : null, persist : false}
        ]
    });

var store = Ext.create("Ext.data.TreeStore", {
    model : 'ExtendedTask',
    autoSync: false,
    proxy : {
        method: 'GET',
        type : 'ajax',
        api: {
            read : 'tasks.js',
            update : 'update.php',
            create : 'update.php'
        },
        reader : {
            type : 'json'
        }
    },
    listeners: {
        update : function(){
            console.log('arguments: ', arguments);
        }
    }
});

そして、これは私の update.php 応答です:

<?php
echo '[ { "Id" : 1,'.
    '"Name" : "Planning Updated",'.
    '"expanded" : true,'.
    '"additionalData": ['.
    '    {'.
    '        "Name" : "T100",'.
    '        "parentId" : null'.
    '    }'.   
    ']'.
']';
?>
4

2 に答える 2

1

ストアのプロキシは、最新のリクエストからの生のレスポンスを常に保持します。このようなことを試して、必要な情報がそこにあるかどうかを確認してください。

update : function(){
   console.log(this.proxy.reader.rawData);
}
于 2013-02-13T20:53:54.437 に答える
0

私は同じ問題に直面しました。私がしなければならなかったことはcls、モデルにロードしようとしているカスタムデータに標準のツリーモデルプロパティ (私は を使用しました) を使用することでした。私が間違っている可能性がありますが、この問題を調べたときから、extjs はツリー モデルに標準フィールドのみを使用するように強制しているようです。彼らは次のように述べています。

モデルが指定されていない場合、Ext.data.NodeInterface を実装する暗黙的なモデルが作成されます。状態を維持するために、標準のツリー フィールドもモデルにコピーされます。これらのフィールドは Ext.data.NodeInterface ドキュメントにリストされています。

ただし、テストの結果、モデルが指定されているかどうかに関係なく、標準フィールドのみが使用できるようです。私が見つけた唯一の回避策は、 のように必要のない標準の文字列型フィールドを使用することでしたがcls、誰かがより良い方法を見つけたかどうかを知りたいと思います.

http://docs.sencha.com/ext-js/4-1/#!/api/Ext.data.TreeStore

于 2013-02-04T05:31:44.310 に答える