また眠りながらコードを書いていたせいか
どこまで書いてたかわからなくなって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 件のコメント:
コメントを投稿