2009年12月14日月曜日

ExtJs-65 Ext.data.Writerで。。。meta。

また眠りながらコードを書いていたせいか
どこまで書いてたかわからなくなってUNDOしても
何があってるかわからなくなって。

要するに動かなくなって困ったということ。

現象は
ProxyにapiでCRUD別にURLを設定してEditorGridで編集してもUpDateでなくてCreate
が呼ばれてしまう。

追ってみて途中で気がつく。
storeのsaveメソッドは
Delte
Create
Updateの順に実行される。
判断基準は
removeリスト要素チェック→Delte実施。
ModifiedRecordsリスト取得
 →rs[i].phantom情報化チェック→新規追加行か?
 →
あぶれたものをUpdate

とこんな具合?

さて、このphantomフラグ。
なぜtrueなんだろう?
このphantomフラグがtrueに為る契機は
record.id内による。
このidに触れる部分はrealizeメソッド、でいいのかな。
でもrealizeは今回直接的には関与せず。
問題はidが設定されていないとされてデフォルトの
ExtJs側が付与するコードつまり現実でない状態ってのが問題。

プライベートメンバの_phidにidせっとっして
そのあとid=でdataのmeta.idproperty値をセットしている。。

あれ?metaデータってid,root,totalPropertyジャなかったっけ?
ソースコードを確認するとidで実装してる。
これじゃぁ認識してくれないわけだ。
そそくさとidからidPropertyに変更して実行。

ちゃんとUpdate用のURL、呼んでくれました。めでたし。

#疲れているときのプログラムは本当に危険がいっぱい。
しかしこのmetaの説明ってちゃんとしたのはどこに書いてあるんだろう。

ひとまずラップして使うことにした。
/**
* @class ExtWrapper.Reader システム共通リーダ
* @namespace ExtWrapper
* @extends Ext.data.JsonReader
* @cfg {Array/Object} フィールド情報
* @constructor and @param
*/
ExtWrapper.Reader = function(config){
var meta = {
idProperty: 'id',
root: 'rows',
totalProperty: 'results'
};
Ext.applyIf(this, config);
ExtWrapper.Reader.superclass.constructor.call(this, meta, config );
}
Ext.extend( ExtWrapper.Reader, Ext.data.JsonReader,{
});

0 件のコメント: