PDA

View Full Version : grid編集時の制御



ak_ext
20 May 2009, 2:33 AM
サンプル
http://extjs.com/deploy/dev/examples/grid/edit-grid.html

priceカラムを編集すると、セルの左上に赤い三角が付きます。

このサンプルでは、そういう動きになってないのですが、
この時他のカラム(例えばavilable)がpriceに連動して
ある値に変わり、直接編集できる項目ではないのですが、
左上に編集した印である赤い三角を付けたいです。

storeをロードせずにこのような動作はできるでしょうか。
→storeをロードすると赤い三角が消えてしまいそうです・・

何卒宜しくお願いします。

Tommy1969
20 May 2009, 4:55 PM
Ext.data.Record の dirty フラグに連動して三角マークが表示されるので、
Store の update のハンドラーで…

update: function(st, rec, ope) {
val org = rec.get('avilable');
rec.set('avilable', ’dummy’);
rec.set('avilable', org);
}

とすれば、実現できそう。(未検証)

# 「storeをロードせずに」ってところがよく分かりませんが…。

ak_ext
20 May 2009, 5:59 PM
update: function(st, rec, ope) {
val org = rec.get('avilable');
rec.set('avilable', ’dummy’);
rec.set('avilable', org);
}
のrec.set('avilable', ’dummy’);
は仮の値をセットしているのでしょうか。

またpriceカラムの値をとってきて、
それをavilableカラムにセットしても、
画面上の表示gridの値は変わらないような・・
store.loadとかstore.reloadとかしてあげないと、
画面の表示は変わらないのではないでしょうか・・
ただ、それをすると三角が消えてしまいそうな。。

実現したいのは
priceは編集可、 avilableは編集不可
ただpriceを編集した後に連動してavilableの値が
変更されかつ、編集した印の三角をつけたいです。

Tommy1969
20 May 2009, 6:40 PM
> rec.set('avilable', ’dummy’);
> は仮の値をセットしているのでしょうか。

YES。同じ値では、"変更された" とは認識されませんので。

> またpriceカラムの値をとってきて、
> それをavilableカラムにセットしても、

すみません、最初、price を取ってくるように書いてましたが、間違えでした。

> それをavilableカラムにセットしても、
> 画面上の表示gridの値は変わらないような・・
> store.loadとかstore.reloadとかしてあげないと、
> 画面の表示は変わらないのではないでしょうか・・

store の値を set で変えるとどうなるか、試されました? ちゃんと変わりますよ。;)

load はストアの内容をリセットするすることになるので、dirty は消えます。
従って、三角マークも消えます。

…なお…。
私のサンプルソースを実行すると、無限ループになります。set で値を書き換えたことで、update イベントがもう一度発生するので。:-P

price カラムの change イベントなど、別のところでやれば、うまくゆくはず…。

ak_ext
20 May 2009, 11:03 PM
ありがとうございます。