2010年2月26日金曜日

ExtJs-75 CheckBoxの値

EditorGridPanelでColumnModelのeditorにCheckBox指定して
サーバからbool型をtoStringして返却すると"True"になる。

これだとCheckBoxにBindしてくれない。Bindっていわないのかな?

仕方なしにサーバサイドのJsonデータ生成部分で泥臭く型を見て小文字化しておいた。
これ、忘れそう。
///
/// 行情報作成
///

///
///
///
///
private static string createRowData(DataTable datatable, DataRow dr, bool fieldname)
{
//--- 一行情報 ---
StringBuilder sbRow = new StringBuilder();
foreach (DataColumn dc in datatable.Columns)
{
if (fieldname)
{
//--- 列名 ---
sbRow.Append("'" + sanitizeJSON(dc.ToString()) + "'");
//--- セパレータ ---
sbRow.Append(':');
}
//--- データ ---
String jsonResData = dr[dc].ToString();
if (dr[dc].GetType() == typeof(bool))
{
jsonResData = jsonResData.ToLower();
}
sbRow.Append("'" + HttpUtility.HtmlDecode(sanitizeJSON(jsonResData)) + "',");
}
//--- 末尾カンマ削除 ---
string row = trimEndToken(sbRow.ToString(), ",");

return row;
}

2010年2月17日水曜日

ExtJs-74 汎化作業の予定2

一月中に3試験2資格合格プロジェクトからそろそろ半月。

資格から離れてExtで遊んでたけどそろそろ
次のイテレーションの開始である。

その前にExtとの一ヵ月後の再開までの備忘録を。
CRUD用のベースクラスはほぼOK。
ただ

・ページング時のストアドもジェネレータで吐き出せるように改造を行うこと。
・createEditorGridPanel、createGridPanelで分けてGrid時のコンテキストメニューから
 編集→プロパティグリッドの機構の作りこみを。
・昔作って放置、すててしまったか?階層構造のGridPanelの捜索。
 ExtJs-55 階層構造のつぶしこみ4ガントチャートのライン
いやな予感が的中してればSDカードとともに闇の中にいったかなぁ。
 まぁまたコーディングすればよいかなぁ。

忘れるなよー、自分。

さ、今日から本格的に資格勉強をしよう。
来週うかるぞ!!
毎月ひとつプロジェクトの二歩目の開始だ。

2010年2月15日月曜日

あれれれ?firefoxが起動しない。

午前4時前に娘の大暴走で起こされて。
しばらくすると落ち着くものの、元気よく遊んでる。
「おとーちゃん、ねちゃだめ」だそうで。

仕方なし、勉強する気にもなれず読書する気にもなれず
久しぶりにプログラムを。

VSから実行。ってあれ?FireFoxが起動しない。
既定ブラウザにもなってるし。タスクマネージャで見るといらっしゃる。
しばらーくすると応答なしで起動(表示された)。おいおい。

firefoxのバージョンいれかえたっけか?
とりあえず一通りうまくいかない。ので全部アンインストール。
で、64bit版のfirefoxを再インストール。

でもこれだとnamorokaになるからRc版になるのかな?
これを機にminefieldでもよいかともおもったけど、それは近いうちに。

http://wiki.mozilla-x86-64.com/Download:Firefox

firebug
googleshortcuts
と、、、、
sage-to?だっけか?
使えてたんだけど、みつからんなぁ。

さて出社だ。出社。

2010年2月9日火曜日

ExtJs-73 Writerのwriteイベントのひとまず解決

CRUDのベーシックな実装は先の方法をI/Fそろえて
関数化して完了とした。
あとはエラー時のレスポンスとメッセージを受け渡す部分を作ればよいかな。

と、ある程度固まってきたので
調子にのって200件ほどの追加とか削除とかしてて
はてそういえばページングについてすっかり忘れてた。
と気づく。

GridのbbarにPagingToolbarくっつければいいだけだからExtJsは楽チン。
this.bbar = new Ext.PagingToolbar({
pageSize: 50,
itemId: 'pagingbar',
store: this._model.getStore(),
displayInfo: true,
displayMsg: '{2}件中{0}-{1}件を表示',
emptyMsg: "データがありません"
});

で問題はストアドで。
久しく指定件数の取得なんてやってないもんだからすっかりどの本に
かいてあるか忘れててCodeProjectやらなんやらを探ってたけど
Webアプリケーション構築技法にベースが載ってた。
ひとまずそれを参考に。

おっと、12時を過ぎてしまった。あすは残業、ねよー。

2010年2月6日土曜日

ExtJs-72 Writerのwriteイベントの解決してない2

もうねぼけて気持ち悪い。
けど最後。
同じオーダで主キーいれて
ってことで
とりあえず単純な登録とレスポンスはこんな感じだと
コールバック後、Storeがちゃんとレコードのなかをみて
ファントムレコードを実体にしてくれているっぽい。
赤いトライアングルはきえるしね。
IDも更新してくれる。
なんだかためしながらだらだらやってるからサーバ側も酔うわからんなってきた。
とりあえず今の段階でのそれを残しておこ。

またらいしゅうかな。


string reqdata = Request.Form["rows"].ToString();
Newtonsoft.Json.Linq.JArray jobjAry = JSON_converter.parseJsonRequestDataForCreateUpdate(reqdata);
foreach (Newtonsoft.Json.Linq.JObject jobj in jobjAry)
{
int id = DataTier.Basetest.Insert(
jobj.Value("charCol"),
jobj.Value("datetimeCol"),
jobj.Value("decimalCol"),
jobj.Value("ntextCol"),
jobj.Value("nvarcharCol"),
jobj.Value("bitCol")
);
jobj.Property("id").Value = id;
}
reqdata = jobjAry.ToString();
string jsondata = "{ rows: " + reqdata + ", 'success': true }";// JSON_converter.insertSuccessRes("挿入成功!!!", "");
Response.Write(jsondata);
Response.End();

2010年2月5日金曜日

ExtJs-71 Writerのwriteイベントの解決してない

昨日のそれはぜんぜんだめで。

DataReaderのrealizeからみで例外が。

結果的にwriteイベントは発火させることはできたけど、
新規に追加した際のレコードをファントムレコードから実体にする
処理がはしるっぽいのだけど、
Write後のレスポンス情報はぜんぜん足りてないから起こられているんだろうと思われる。

どんな処理をしてるかは今日はもう追わないけど
少なからずとも追加オーダーで主キーとなる情報をいれて戻してやることが
必要らしい。
日本語APIに感謝。

追加後のレスポンスはそのまま返却すればいいのかなぁ。。

2010年2月4日木曜日

ExtJs-70 Writerのwriteイベントの解決

後記:娘は泣くし、風呂で意識うしなってぶくぶくって漫画みないなことになりつつも
きになって、もやもやしてしかたなかった昨日のwriteイベント。
ようやく完結。ぜーっ対に忘れるので残しておこう。

======
風呂でおぼれそうになりつつもすっきりしないと
今後のいろんなことのモチベーション維持にかかわるので
きょうはその機能の未解決な続きを。

createCallbackで生成されたコールバックは果たしてどこで
コールされるか。という続き。

おさらい。
execute→this.proxy.request。

httpProxy.requestにコールバックを引き渡しているので
そこから追跡。
httpProxyにrequestの実装はなく、チェーンをさかのぼって継承もとのDataProxyを追跡。

DataProxyのrequestでは
this.doRequest.apply(this, arguments);
でdoRequestをコールしてる。

ここでいうthisのスコープはhttpProxyになる。
httpProxyのdoRequestでは渡されてきた引数等(コールバック含む)オブジェクトに
設定してExt.Ajax.requestをコールしてる。
そもそもExt.AjaxはExt.data.Connectionの継承でシングルトンOBJ。

Ext.data.Connectionのrequest内で
successにme.handleresponseを設定
してExt.lib.Ajax.requestをコール。
この先はおそらく非同期通信されてさっきのme.handleresponseがよばれんだろな。
ということでいったん、ここはおいておいてme.handleresponseを。

この
handleresponseはというと。。
内部でコールバックを呼び出す。
このコールバックは
options.callback.call(options.scope, options, true, response);
このコールバックは、
実態はhttpProxyのCreateCallback内で実装されているreadじゃないときの
function。

で、
この関数のなかでアクションはreadじゃないから
this.onWrite(action, o, response, rs);
を呼び出してる。
このonWriteはまず、レスポンスを取得する。
res = reader.readResponse(action, response);
response.responseTextがあればそれをオブジェクトに代入して検証してる。
このresponse.responseTextっていうのがサーバサイドから返却した{success = true}
とかのJson文字列。

そいつを this.getRoot(o);にかけてrootを取り出すんだけど
あれ?undefine
new Ext.data.JsonReader.Error('root-undefined-response', this.meta.root);
で例外。

あああああああ!!
わかったよ。

そうか。
#metaにrootまたはrecordがないとrootがないっておこられる。
#そもそもWriterのmetaにはsuccessPropertyしか設定しなかったし。

で、rootチェックが終わったら
getSuccessでcreateAccessor(successPropertyで設定されたキーで値を取得)して
ようやくお目当てのsuccess =tureが取得ってわけだぁああああああああ。

総括して、
metaには
rootが必須。
successProtpertyは当然必須。
ってことでWriterに独自のメタを設定したんだけど、、、、、

そもそもStore生成時にReaderが上書きしちゃうので
仕方なくWrite時のサーバサイドからの返却を
Read時のJsonフォーマットと
同じ形にすることで解決。

それに伴うサーバレスポンスを返却することで解決した。
つかれたぁ。

まとめ:
Writerのmeta情報はReaderでうわがかれる。
metaにはrootが設定されていること。
そしてWriterのときのサーバサイドからの返却はのrootはemptyじゃだめ。

とっても単純な例だと、
ExtWrapper.Reader = function(config){
var meta = {
idProperty: 'id',
successProperty: 'success',
totalProperty: 'results',
root: 'rows'
};
Ext.applyIf(this, config);
ExtWrapper.Reader.superclass.constructor.call(this, meta, config );
}
Ext.extend( ExtWrapper.Reader, Ext.data.JsonReader,{
});
こんな具合でメタ設定しておいて、(ぶっちゃ毛WriterもStore内でBuildしてくれる)

サーバからは
{ 'rows':'writeresponse', 'success': true}
こんな具合のを返却したらまずは穴が開く。
そっからはメッセージなり、、と。


あー疲れた。けど満足。

2010年2月3日水曜日

ExtJs-69 Writerのwriteイベント

Storeのコールバックの設定について


StoreのCallBack設定の部分。
1:executeメソッドのなかで、
doRequest生成後、
各アクションの処理を実施後、
this.proxy.requestを行うが、←httpproxy
この際のCallbackがthis.createCallback(action, rs)で生成されるコールバック。(2:)
requestの第四引数。
で、httpproxyはdataproxyを継承してるので
dataproxyのrequestを見てみる。

アクションがreadの場合はloadRecrodsを返却するようになっている。
それ以外、writeとかupdate、deleteについては
onXXXXRecordを呼び出した後、(XXXXはアクション名をキャピタライズしたもの)でそれを呼び出した後、
successがtureならばfireEventで'write'指定してイベント発火。


やってて、直前のトレースもはいてて、successがfalseって言うことも確認済み。

うむ、あってるっぽい。
でもsuccessがfalseで返却されてしまう。

サーバーサイドは無条件で
{success:true}
とか
{"success":true}
とか
{success:"true"}
とか試したけど、だめ。

今日はここまで。かいけつしないなぁ。

https://yui-ext.com/forum/showthread.php?t=82419
http://www.extjs.com/forum/showthread.php?t=89633

この辺ど同様なのかね。


うぁ、ねむぃ。

2010年2月1日月曜日

ひとまず復活

とりあえず一月中に二つ資格を取る計画は無事完了。
またExtJsで遊べる。
code:xでの実践開発ガイド再開されるっていってたし楽しみです。

かなりやさしい資格だったので楽だったがこれを継続的に苦にならずに
続ける計画のスタートライン。

キモは音楽とステーショナリー。
と忘れかけたころに読むリファクタリングウェットウェア。
SQ3Rを基本に。S.M.A.R.Tな目標を。

そろそろボールペンをグレードアップするか、
資格用のブックカバーを皮で作るとか。。
わくわく。

でも恐ろしく眠く、のどが痛いので今日は寝る。
今週は1時前にねるぞ。