2009年12月28日月曜日

ExtJs-66 Ext.data.Writerで。。。meta。2

あら。先日の実装から はや2W。
ソース壊れたりなんだりしてまたもや牛歩。。。

いまのシステムはサーバサイドはASP.NETC#で組んでるのだが、
Jsonのシリアライズがどうも。。ってなっててそれはJson.NETで解決済みだったんだけど
いままでは一行ごとのシステムコミットで実装しててサーバサイドへのリクエストは単一行情報のみだった。

現状の実装ではWriterをしようすることで
複数行のCreate、複数行のUpdateが可能になり、それぞれのURLへリクエストが送られてくることになる。

わかってないことが二つあった。
①まず、リクエストのなまえってなにでくんのか?
 Ext.data.Writerのソース見ると params[this.meta.root] に突っ込んでる。
 で、WriterのmetaってのはReaderのmetaの複製。これはStoreのコンストラクタでやってる。
 前のえんとりExtJs-65でラップしてるのでシステム内は「rows」ってことになる。a
 サーバサイドでstring reqdata = Request.Form["rows"].ToString();
 でアクセス可能。よしよし。


②Json.netが使えていない。
 ってーのもJobjectクラスのParseメソッドしか触っておらず、
 単一情報だったときは泥臭く、『[{一行情報}]』の『[]』をTrimしてParseにかけてた。
 うごきゃーいいし、ってのりだったのでまったく見ていなかかった。
さて、複数だとこまるー。
 ってことでちゃんとリファレンスを読むとJarrayクラスがある。
 想像通りJobjectの配列返却。問題なし。

ってことでめでたく、、
複数行のCRUD実装のゴールが見え隠れ。

コンテキストメニューの実装を加えればこの開発の基礎周りは出来上がり。
よかった。今日はもう寝る。

2009年12月24日木曜日

復活の呪文

完全とまではいかないけど復活。。
SDカードをHD代わりにはもうしない。。。


で、復活の呪文
参照の追加で system.transactions.dll

#TransactionScope使ってんのわすれてて、ビルドエラーおきた。

動作確認取れたし、ひとまずおしまい。。ねよー。

2009年12月23日水曜日

やばいこわれた


あらー。
こわれたよー。

もうだめだめちゃんです、。。。

意気消沈。

2009年12月21日月曜日

さむい

あと一時間で起きる時間。

ねるべきか、
おきてそのまま出社するべきか。

微妙にねむくないんだよなぁ。。

ややピンチ

子供寝かしつけたらねてしまい、
1時半過ぎにおきてめがさめているので
いろいろといじくり始め。

さぁそろそろ寝る前にソースでも眺めようかとおもい、、、
実行させるもコンパイルエラー。

あれれついこの間動いてたのに。
寝ぼけたかな?とおもい、コンパイルエラーを起こすファイルを
開こうとすると壊れてるっていう。

ファイルはある。テキストエディタでも動かない。
バイナリエディタでは、、確認するのわすれた。。

で、いまは
CHKDSKしろっていうからしてたらそのファイル、
最初のアロケーションユニットがうんたらっていってて壊れてたっぽい。

そのほかも多数。。
あららなかんじで、そろそろバックアップでもとっておくかな。
その前に。「っつーか寝ろよ。」って自分突っ込みを。

2009年12月18日金曜日

SQLServer2008の列変更

EeePCからデータベースを移行して
接続確認したんだけど、
なぜか小数点列がfloatとかで定義してて、、
あれまぁとdecimalにしよっと。と変更したんだけど、、、

"変更の保存が許可されていません"

っていう。

そうなんですか?
http://support.microsoft.com/kb/956176/ja
だそうです。

おっしゃ。できた。

2009年12月17日木曜日

はやー

メモリ4Gにして64GBのSSDにしたら
ログイン画面まで48秒だったのが25秒になった。
はやー。

今日は開発環境つくりー。
captureSTAFF LITEが使えなさそうで悲しい。
64bitの障壁ってこのあたりなのかな。

テキストエディタ、バイナリエディタも大丈夫そうだし。
ZoomツールもOK。

今はSQLServerインストール。
このあとVS2008入れておしまい。
もう眠いので寝ようっと。

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,{
});

2009年12月13日日曜日

ようこそエイサー



予算の都合EeePCでの開発って試みてたけど、
やはりEeePCにVS2008、SQLServer2005積んでの開発は
プチストレスがあり。。。
かつ1024×600ってのもIDEの複数ペインには適しておらず。。

日進月歩。
CULVてーもんが開発されーのでもってAcerがまたヤッスクしてくれたので
ノッテミマシタ。
うはー買ってしまったよ。
Win764bitってのがうれしい限りです。

当然デフォルトでは使用するつもりはなく
メモリ4GBのSSD64GBに換装です。

ので、リカバリディスクをAcereRecoveryManagementで作成中。
最近のってリカバリディスクついてないのねー。
ブランクDVDの在庫あってよかった。

ってじつはメモリもSSDもまだ購入できておらず。
地元のPC屋が20時で閉まってしまうので
子供寝かしつけてからだと間に合いませぬ。

え?このPCはどうしたかって?
スーパーに買出しに行くがてら電気屋で。

開発ライフがまた楽しくなりそうです。
キーピッチが広くなったのでまだ不慣れ。。

EeePCは移行後修理出して居間のブラウジング専用PCになるのかなぁ。
ようやくネットブックらしく成るね。
いままで無理させてきたからお疲れ様でした。

2009年12月8日火曜日

twitter

また人の影響受けてtwitterをはじめてみた。
FeedTweetにもトーロクしてみた。

そういやみくしーにも手をつけてないな。
どうすんだっけかな。。

ってこれでTwitterに更新記録されんのかな。

2009年11月25日水曜日

代理キーボード

↓キーは重要。

ExtJs-64 ext-doc

↓キーがもげてそれ以来まったくパソコンを触ってなかった。
デスクトップのDELLPCの純正キーボードがあまっていたので
それとEeePCをダイニングに乗せてやってるとまるでモペラ。

で、おいといて、

組み上げを進める上でドキュメントコメント埋めたいなぁと。
ExtJs勉強会で教わったExt-doc。覗いたことも触ったこともなかったので
覗いてみた。

クラス。
* @class
* @namespace
* @extends
* @singleton
* @cfg
* @constructor and @param
コンフィグ
* @cfg

プロパティとType
* @property and @type

メソッド
* @method, @param and @return

イベント
* @event, @param

アクセス修飾子は言語上ないんだろうけど、
その辺の記述ってできないんだろうか?
これはヒコウカイナノデー的なものは書かなきゃいいのかな?

ひとまずは覗いてみたってだけで。

2009年11月9日月曜日

もげた

シタキーがカチカチ
言うので

なんやかんやいじったら


もげた。

その時の写真。


ものすごく困る。

2009年11月5日木曜日

ExtJs-63 GridPanelとstoreとproxyとreaderと

はっと気がつくともう数週間。
興味がいろいろありすぎてまたExtJsがおろそかになった。
さて、
がらっと作り変えつつ、以前ためしにつくってたやつを流用しつつVer3.0にしつつ
ひとつづつ組み立てていこうということでまた練習がてらゼロからカタカタとコーディングし始めて。

先ほどから開始して1時間ほど経過してまーたどうしようもないことではまった。
初心者です。ほんと。すこしへこんだ。

GridPanelに
JsonStoreセットしてやるか
Store、
JsonReader、
HttpProxy
ってセットでやるかまよいながら
組み替えてて
最終的にリーダーやらProxyやらを挿げ替えられるようにと
Store、
JsonReader、
HttpProxy
このセットでひとまず組むことに。


そこでまたなんでかいつの間にか
JsonStore
JsonReader
HttpProxy
ってセットで組んでて。

これ、以前の大文字小文字見たいな感じで
エラー起きずに描画だけされない。。
columnmodelのタイポでもないし、カラムの数もあってるし。

なんとなく、それとなくあってそうな感じなので疑う余地もなく
あれれ荒れれれと困惑してました。

Storeにしたら無事オーケー。はぁ。

キーボードもげるし。ついてないので今日はネヨ。
久しぶりのコーディングだったのに。
はぁ。

2009年10月28日水曜日

ExtJs-62 インテリセンス

そういえば、VS2008、Sp1が容量の問題でインスコできず。
どうやら標準でExtJsのインテリセンスがサポートされているってのを試すことができず。

と、ネタはずいぶんとふるいのですが更新も絶えているのでエントリ。

「/// <reference path="vswd-ext_2.2.js"/>」

spketのページからどうぞ。
ttp://www.spket.com/

ビルド通した後、普通に働いてくれます。べんりー。
もちろんバージョンは2.2ですが。。

3.0用にDocsをパースしてジェネレート。って。やる気がしない・・・・・・。

2009年10月21日水曜日

ExtJs-61 Ext 3.0 - API Documentation 日本語版

先日の勉強会で浅野氏が発表していたのが公開されました。
ってずいぶん遅れての投稿だな。

ExtJsでお世話になっているcode:xから。
http://code.xenophy.com/?p=807

身体の本とかプロジェクト管理の本とか読み漁ってるせいか
最近、PCから少し離れ気味。

いかん。
いかんなぁ。と。

はよねよ。

2009年10月14日水曜日

ExtJs-60 ExtJsのロード

はっと気がつくとすぐに期間が開いてしまうものだ。

サンプルから作り直すということで
先ほどからはじめました。先の開発から一週間。って一週間に一時間しか時間をとってない!?
びっくりです。

気を取り直して。
いままでscriptタグで書いてたのを今回からは動的にロード。ということで
「javascript load」とかでケンサクするとヒットするDOMでの動的ロードです。
ExtInitialize.jsとApplicationInitialize.jsって分けて
ExtInitialize.jsはあくまで固定的に
includeStyleSheet = function(filePath)
{
//alert('includeStyleSheet');
var link = document.createElement('link');
link.href = filePath;
link.rel = 'stylesheet';
link.type = 'text/css';
document.getElementsByTagName('head').item(0).appendChild(link);
}
includeScript = function(filePath)
{
//alert('includeScript');
var script = document.createElement('script');
script.src = filePath;
script.type = 'text/javascript';
document.getElementsByTagName('head').item(0).appendChild(script);
}

extinclude = function(){
alert('extinclude');
includeStyleSheet('/hoge/fuga/ext-3.0.0/resources/css/ext-all.css');
includeScript('/hoge/fuga/ext-3.0.0/adapter/ext/ext-base.js');
includeScript('/hoge/fuga/ext-3.0.0/ext-all-debug.js');
Ext.BLANK_IMAGE_URL = "/hoge/fuga/ext-3.0.0/resources/images/default/s.gif";
};
window.onload=extinclude();

こんな感じにしてみた。
今日はおしまい。

これだめ。
Extロード後にExt.OnReadyがはじまって。。。って成るはずなのに
これだと
Extインクルード用Jsロード
→ほかのインクルードJsロード
→ExtJsロード
→ほかのJsロード
ってなって「ほかのインクルードJsロード」の実装部分における
Ext.OnReadyがあんでふぁいん。。

一週間たった今日、動かして気づいた。
一週間まったく触らず。っつーか動かしてなかったんだってことに気づいた。
まだ若いつもりだけど耄碌してきたかな。

2009年10月8日木曜日

タイフゥ

台風の影響、
電車にのればもんだいなし。
朝からゆるりと読書タイム。

目的地まで電車が行かず、アナウンス聞いてがっくり。

さて、どーしよかなー。

2009年10月7日水曜日

読書6 The Definitive Guide to the Microsoft Enterprise Library

なにも英語知らんのに洋書かうことないのに。と
でもEnterPriselibraryについての書かれている書籍もないし。
ネットでも日本語情報すくないし。

ということで辞書片手にこつこつ読んでました。
おかげで詳細はともかく読み方と使い方はなんとなく。
のおかげでLoggingABできたわけだし。

この次は暗号・複合化の部分。
やったるど。

ってことでこの本はお勧め。こづかいな自分には相当イタイ。

EnterPriseLibrary LoggingAB

タイトルは、
ExtJsじゃないものもExtJsってついている。
これは半分ツール作成って意味もあったんだけど、
やめた。
----
気がつけば10月。
気がつけば半月以上。先日ExtJs勉強会に参加させてもらい、
each
iterate
invoke
flatten
など、知らないことばかりを勉強させてもらいました。
というよりずーっトほったらかしにしていたので
久しぶりにコーディングを。

DAABを使用してのサーバサイドは基礎的な部分は終了したので
LoggingABを使用してのログ吐きの部分を試していました。

EventLogへの出力はちょちょいとやればすぐにできました。
DBへの出力はというと。ほんのすこしだけ躓いたので。のこしておこう。

ちょうど先日買った洋書がありそれに基づくと。。。
(デフォルトのままです)
①\Program Files\Microsoft Enterprise Library 4.0 - May 2008\EntLib4Src\Blocks\Logging\Src\DatabaseTraceListener\Scripts
のLoggingDatabase.sql
を実行してLoggingのDBを作成。
・ユーザきったり、同時についかされるストアドに実行権限付与したり。
sql、ストアドの中身を書き換えて今のシステムDBに統合ってもの考えたけど
今はまず動かすことから。

②Enterprise Library ConfigurationでWebConfig開いて
 loggingDBアクセス用のConnectionstringを設定。

③アプリケーションルートでコンテキストメニュー開いて
new→LoggingApplicationBlock

④TraceListenerでコンテキストメニュー開いてDataBaseTraceListenerを
追加。

⑤DataBaseTraceListenerのDataBaseInstanceに先ほど追加しておいたConnectionStringを選択しておいてやる。

⑥LoggingErrors&WarningsにDataBaseTraceListnerがいるので
その中のReferencedTraceListenerにDataBaseTraceListerを選択してやる

で適当に

LogEntry entry = new LogEntry();
entry.EventId = 1;
entry.Priority = 0;
entry.Categories.Add("Trace");
entry.Severity = System.Diagnostics.TraceEventType.Critical;
entry.Message = "write critical";
Logger.Write(entry);

とかでDBに書かれていることは確認できた。あとは詳細のパラメータの勉強だ。
と、ループファイルのTraceListenerも使えそう。

ちなみにこの⑥でちょっとはまってた。
認識間違ってて、Tracelisterつくりゃ(登録したら)作った分だけ
それぞれよびだされるんと思ってた。ので設定するっていう考えが
いつしかすっ飛んでて、

あれ?イベントでるのにDB出ない。というよりイベントログしか出ない。
あれれ?といった具合に。しょぼすぎでした。先入観コワ。

こちらのサイトにもお世話になりました。
ライブりとの出会いもこのサイトの方の記事のと出会わなければ知りえなかった。
http://enterpriselibrary.jp/dnn/
改めて御礼です。

さて、
EnterpriseLibraryにも少しづつなれてきたっことですし、
そろそろおまちかねのものすごく久々なExtJs開発に着手ができるわけで。

たのしみだ。

2009年9月14日月曜日

読書5-「Webアプリケーション構築技法」

はい。
VS2003のころ、Vol1~5のうち2~4を買い、なんで5巻かわなかったのかと
後悔しつつ、
気がつけば時代は過ぎ、
前の会社に転職する時に買いました。
でも出番があまりなくてざーっとよんで知識の引き出しだけつっくってほったらかし
でしたがようやくサーバサイドの開発に入ってきて宝庫になりました。

この本も読みやすく、ひたすら読みやすくわかりやすい
私好みの本でした。
で、さっきのMSDTCのこと。
ちゃんと嫁P199※40。

ですよね。

ExtJs-59 自動トランザクション制御の設定

はい。
子供と一緒に寝てしまい、先ほどおきて。。
明日も仕事だけど眠気がきませんでした。
ので眠気がくるまで少し。

今回のツールでは自動トランザクション制御を使用して実装する
ってことにしてます。いままでやったことありません。

TransacsionScopeオブジェクトを利用して
従来のDB内にトランザクション生成して管理
ではなく
DBの外側でトランザクションをきるってことらしい。
実装が楽で

using( TransactionScope tx = new TransactionScope(TransactionScopeOption.RequiresNew))
{
//トランザクション対象処理1
//トランザクション対象処理...
//トランザクション対象処理n
tx.Complete();//このメソッドがDispose時に呼ばれているかで判断される?らしい。
}
でトランザクション制御したいコードをくくります。

usingブロックから抜けるタイミングでのDispose時に二相コミット
がされるって。

でその二相コミットはWikiの基本アルゴリズム項がわかりやすい。
で、それを管理してるのがMSDTC
DistributedTransactionCoordinator。
WindowsServer2003だと追加インストールしなきゃだめだそうで。
XPはサービスが「手動」になってるので。

あ、
ああ、
だからだ。
(わたしはXP)

とさっき解決したので書き込みました。
赤間さんの本ちゃんと読めよ。
ってもう一人の私が突っ込みました。

2009年9月11日金曜日

楽しみです。

また楽しみが増えました。

日本でのExtJs記事がまた増えますね。
とても楽しみに期待です。

ネタ貯めの季節がやってきた。

2009年9月8日火曜日

チメイテキ

なんでこうも荒れるかなぁ。
プリウスのリカバリがきっかけだけど、さすがにこれだけ汚いと勉強するきになれん。

2009年9月7日月曜日

サファリ

を買った。
オレンジなかった。
クロニシタ。

ペンが増えてきてケースが欲しい。

2009年9月5日土曜日

読書4-「グラス片手にDB設計販売管理システム編」

ちょうどDBだったので。
3年くらい前、DBに興味があって転職もかんがえてたころに買った本。
このあとに会計システム編も買って読んだ読んだ。
勉強になってとてもためになった本。

内容と書き方と構成と好みの本で。
著者のファンになりそのままプロジェクト管理、業務システムについてやらも
読ませてもらったけどそれはまた別で。

販管ってだけじゃなくて初めてシステムDB設計する人は読みやすくて
ためになってとても勉強になる本だとおもいました。

なにせ読みやすい(図が多いのが好き)。

ExtJs-58 ひとまずDB再設計

当初の想定より3分の1くらいのきぼになったけど
とりあえずDBの仮設計はもういいかな。
と。

も少し規模を小さくしてもよかったかも。
あまり欲張りすぎても形にならないしね。

それより早くつくらなきゃ。

と、
ExtJsを3.0にした。

それと
Data Tier Generator、
ExtJs-30とかで書いてたけど、
VS2003のころ使ってたのは
for EnterPrise版ではないやつで今ではVer4.3とか4とかになってたかな?
結果オーライだったけど、
ぜんぜん勘違いなことをかいてたなぁと。
一旦ソフト開発会社を離れたから記憶がすっ飛んだんだと。
そういうことにしておこう。

2009年9月3日木曜日

読書3-「ピエールとライオン」

年長の娘が図書館で
宇宙の図鑑とこれを借りてきた。

何気なくめくったら

ものすごく良い。
もともと子供の絵本の言葉のリズムはすきだけど

はじめの語りから

最後のそれまで

なんだか手元においておきたくなるかわいい本です。
かおうかなぁ。。。
すごーく気にいきりました。

2009年9月1日火曜日

読書2-「ソフトウェア開発201の鉄則」

社会人になって初めて買った仕事の本。
誰かに貸してそのままなくして数年間放置状態だったので
先日Amazonでかったらずいぶん版数があったので割と売れてたんだな。

いまも新人君に貸し出し中。

ソフトウェア開発はじめるにあたっての
「XXX言語入門」と一緒に手引書的な位置づけで購入するってのもよいかなと思いました。
一ページ1鉄則な書き方で読みやすくまとまっているので
これまたしばらーくしてぱらぱら読み返すとよい本。

だからまた買ったんだなー。

ExtJs-57 階層構造のつぶしこみ6ガントチャートのライン



まーた期間が開いてしまった。
久しぶりに30分ほど実装を。


セルの境界線によるずれと
デフォルトのGridにおけるマージン4ピクセルってのに
やや戸惑って
ようやくできたと思いきや
表示期間と実績バーの長さのおかげでもうひとつ実装を。
※図中のitem10のところ

そろそろ卒業したい。
・レベルによるバーの太さ、色変え
・実績と予定線の色変え
でいったん卒業しよう。

もう少し。

2009年8月30日日曜日

読書1-まずはこの本「達人プログラマ」

読んだ本について書いてこー。ときめたのだがいろんな人のブログに張ってある
amazonのアフィリエイト。あれ、「いいなぁ」と思ってて
手を出せてなかったので。やってみました。
1、登録して
2、うぃジェット作成して
3、そのコードをコピペ
って簡単だったんだねー。

-------------
さて、

「プラグマティック」
って言葉をものすごく植えつけてもらった良書です。この本。

だれもが良書といってるであろう良書です。
いつかったか覚えてませんがチョコチョコとぱらぱらと
読み返すたびに身を引き締められ再度「気づき」をもらえる本です。

ほんと、このほんに出会えてよかったと。
この本、後輩が紹介してくれた気がします。たしか・・・。

あ、SP3インストール終わってた。
あ、嫁さんのPriusもリカバリ終わってた。

今日はもうネヨ。

デスクトップPCヲ仮想化シテ自宅サーバニシテミヨウカト

夏に入り、
デスクトップPCをまったく使わなくなってしまった(おそろしくあついので)。
ので
かなりもちぐされになってしまうので
自宅サーバを立てようかと思い。でも結局あついからPC寿命の減りはやそ。。。

で、ついでにいまの環境ぐちゃぐちゃなのでリカバってまっさらにシテ。。、
サーバは
いろいろと試してはリカバリをやってみたく。
OSもXPPro、Homeひとつづつあまってることだし
先日会社の上司にVirtualPCについてあれこれきいたので
早速。

インストールまでは完了。SP3あて中。
嫁さん用に5年前のノートPC引っ張ってきてのリカバリも並行して。

ひまなのでブログ更新を。
最近本をよみあさっていたのでづらづらと書くことにしようと決ーめた。

ちなみにプログラムは一向に進まず。
進捗バーの1ピクセルずれるとこや、月またぎだと2ピクセルだし。
とかその辺を調整中。で、手をつけず。

2009年8月26日水曜日

リンクヲ

はらせていただきましたよー。
ExtJsで足元おぼつかず右往左往していた私に
体系だてた学習というか
助言を下さったゼノフィの小堤社長。

いつもありがとうございますです。
ホントウニグレイトデス。

2009年8月17日月曜日

ExtJs-56 階層構造のつぶしこみ5ガントチャートのラインとカンレダへっだ


本当に牛歩のごとくな進捗ですが。

それっぽくなりました。全部固定値だけどどうすりゃ変化がおきて
期待する形になるのか検討がついてきました。
最近毎日30分から1時間コーディングの時間が取れるので前よりも
進みます。そろそろちゃんと作りたいです・・。

さて、ラインはExtのProgressを参考に。
とヘッダは普通にテーブルで実装し、
load完了のコールバック内で実装してみました。

やってることはいたって簡単。
まずはストアにコールバックを設定
this.store.load({
callback : this.loadedCallBack.createDelegate( this )
});
コールバック内で
getViewしてGridView取得して
そのHeaderCellを取得
var headercellElement = this.getView().getHeaderCell((this.dataConfigObject.length-1));

そのinnerHTMLを書き換えてやればヘッダはできます。
ようやく少しづついじくれるようになってきましたね。

で、もうひとつラインですが、
renderで実装。
いまはシステム共通の場所につくっちゃったけど
GanttGridplugInみたいなかたちでサイズとかのUtilityをふくめて
再編成する。
ためにここに残しておこう。

System.Common.Render.GanttLine = function(value, metadata, record, rowIndex, colIndex, store)
{
//From Toより(始点、終点)サイズの取得

//種別による色の指定

//実績からイナズマ線用のprotを取得しておく(未実装)これはhiddenのDIVでくくっておいてあとでCompositElementでぶん回しの線引き用。

//ProgressBar実体

return '<img src="" class="system-common-progress-bar-schedule" style="width: 400px;" />
'

//return 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa';
}

手帳バージョンアップ

最近がんばってるのでご褒美に手帳を。左は今までのPORTER。
右が新しいbindexのアシスト。
http://shop.jmam.co.jp/system/1190532_1409.html
「カラフルでスタイリッシュな書くことを考えて」るてキャッチにきた。ツールの仕様は全部システム手帳だからなー。
久しぶりにこーいったものをちゃんとえらんだなー。薄さ、機能性、とやはり色。
ご褒美はモチベーション維持になります。
これとあとペリカンのサファリのオレンジを買う予定。前の前の会社の後輩が使っててよさそげだったので。よーやくペンデビュー。

2009年8月14日金曜日

ExtJs-55 階層構造のつぶしこみ4ガントチャートのライン







TracなりRedMineなりガントチャートがついてる。

ツリー構造はそれとなくできたのでよしとして
ガントチャートをこれまたGridPanelに乗せようと意気込みました。
せっかくだから男らしく日単位で列を追加して管理してみるかと

ColumnModelにとりあえず固定数分追加してみた

//元のデータ構造に日付を示すconfig情報をAddする。
//ためしに一年分の列を足してみるテスト(重すぎ。使い物にならない)
//for(var day = 0; day < 364; day++){
// this.dataConfigObject.push({name: '' ,mapping: '' ,dataIndex:'' ,header:'1/1' ,width:20 ,sortable:false ,hidden:false ,hideable:false });
//}
//for(var day = 0; day < 90; day++){
// this.dataConfigObject.push({name: '' ,mapping: '' ,dataIndex:'' ,header:day.toString() ,width:20 ,sortable:false ,hidden:false ,hideable:false });
//}
//やっぱりおもいわ。最小粒度にフォーカスあわせるといつもこうだ。
//line用の列をひとつ追加してヘッダは別途分割ロジックを入れてやろう。とおもう。

むちゃくちゃおもくてボツ。
collapse,expandの処理が「モッタリ」感たっぷり。1年分表示させようものなら
NGな時間をこしてからのレスポンスだし。。

で、ながーいれつを追加してそこのrendererで線を描画することにした。
(ほんとうならGridの背景色塗りつぶして終わりにしたかったのに。。。)

方針だけ決めて押しまい。
(ツリー構造のグリッド項目名)+(データ詳細/ガントのスライド切り替え)という組み合わせの
ものにしようと思った。

Elementの選択から始まった最近の流れ。
これが終わればXtemplate!!でそれが終われば技術調査はおしまいで再設計。

早くGridおわりにしたいな。。
さて、線は終点-始点幅分を画像をひぱりゃいいnだろうけど。
その列のヘッダはどうかこうかしら。
テーブルでカレンダー表示だろうな。

2009年8月13日木曜日

ExtJs-54 階層構造のつぶしこみ3親子の保持

今日はいろいろ進展があった。その1

先日の検討結果よりtoggleの実装をやめたのですが、
親子孫の関係の中で孫の世代の操作を親の世代が無視するという
現象がう生まれたんです。操作情報を保持できない問題にぶつかってうーん。
って成ってました。

エクスプローラとかExcelのグループ化って子の状態を保持してるじゃないですか。
あれをやりたいなぁと。

もちろんExt本体も参考にって思ったんですが
親子のexpand、collapse制御は階層別に隣接する制御を実装して
関数を再帰呼び出し(fireevent)してるみたい。
それと同じじゃちょっと面白みにかけるしパス情報もってるんだからもっと簡単に
なんとかならないかな?ともおもった。

この階層構造、ファイル管理機能を作成するときにもしようしたいので
できればファイルパスをそのままちょこっといじくるだけでそれとなくできないかな?
と通勤時間にうーん。ってちょいちょい考えてました。

でこうなりました。
「キーワード」でロックすることで回避しました。
わかりづらいけどまとめると、、、

各要素は親子孫のパス情報をある特定の区切りで保持しておくこと
①ある特殊なキーワードが含まれている場合は処理は行わない。
②ある特殊なキーワードは一意性のあるIDと合成される
③ある特殊なキーワードは一意性のあるIDの処理の結果子孫へは反映されない
④ある特殊なキーワードは一意性のあるIDの処理と対となり削除、追加の操作を可能とする。

すると
親ID
 親ID 子ID
  親ID 子ID 孫ID
 親ID 子ID-2
  親ID 子ID-2 孫ID-2
とあり、

子IDが圧縮した場合、_KEYを付与
親ID
 親ID 子ID_KEY
  (親ID 子ID_KEY 孫ID)←表現上見えていない
 親ID 子ID-2
  親ID 子ID-2 孫ID-2
となる

で、この状態で親が圧縮した場合
親ID_KEY
 (親ID_KEY 子ID_KEY)←表現上見えていない
  (親ID_KEY 子ID_KEY 孫ID)←表現上見えていない
 (親ID_KEY 子ID-2)←表現上見えていない
  (親ID_KEY 子ID-2 孫ID-2)←表現上見えていない
となる

親の展開処理のとき_KEYを利用して制御を行う。
まず、
①親ID_KEYを親IDに戻す
親ID
 (親ID 子ID_KEY)←表現上見えていない
  (親ID 子ID_KEY 孫ID)←表現上見えていない
 (親ID 子ID-2)←表現上見えていない
  (親ID 子ID-2 孫ID-2)←表現上見えていない

②KEYが含まれていない行を復元する
親ID
 (親ID 子ID_KEY)←表現上見えていない:KEYが含まれているので復元せず
  (親ID 子ID_KEY 孫ID)←表現上見えていない:KEYが含まれているので復元せず
 親ID 子ID-2←復元
  親ID 子ID-2 孫ID-2←復元

とやると
親子孫、子孫、。。。とある特殊なキーワードによって
縛ることが可能で前の状態の簡便な保持の実装が行える。

という仕組み。

形になってきた。

2009年8月12日水曜日

ExtJs-53 階層構造のつぶしこみ2検討中

救命病棟見て風呂はいって倒立してたらこんな時間。
寝なければ。

さて、
つぶしこみはなんとなくはできたものの大きな課題が。
①階層構造っぽく
②子要素の状態を保持した状態でのexpand、collapseができなくちゃ。

①これは解決
 columnModelでrendererに実装してあげて
 level列情報を取得してその数分インデントを付与してあげればOK。

②これは未解決
 今の構造だとパス情報をクラス前方一致で引っ掛けて
 ConpositElement取得してぶん回して非表示用のクラスを当て込んでる(toggle)
 だけなので親階層でexpand、collapseすると子要素もお構いなしで
 連動してまい、toggleでの実装なので孫要素を閉じた状態で親要素をいじくると
 変なことになる。
 うーん、楽してなんとかならないかな。
 
 まずは
 ・toggleでの実装をやめる。
 だな。
 なんかこれで解決しそうな予感。

 実装はまた今度しよ。
 

2009年8月11日火曜日

ExtJs-52 階層構造のつぶしこみ

今日は10日だからまた1W。
先日から夏季休暇をもらってたため、またもや進捗無し。というと寂しいので
先日の続きをゴリ押しで形付けた。

①ストアドから階層のパス構造は返ってくるようになった。
②グリッドのつぶしこみはtoggleを使うことにしている。

ということで
ロード後のデータアクセスと行へのクラス操作がわかればとりあえず画面には
変化が現れるかと。

・データアクセスと追加。
sotreのロード後のコールバック関数内でのアクセスが一番簡単なので(というよりも
それ以外は考える頭がない)そこでパス情報を取得。
で、viewを取得してパス情報をそのままCSSとして追加してしまう。

loadedCallBack : function( record, options, success ){
if( record.length === 0 ){
//alert('0件ですstoreを空にして再描画で空ってことを。でとりあえずOKかな?');
this.store.removeAll();
this.render();
}
else{
//TODO:再計算ひつようか?
//this.getView().updateAllColumnWidths();
var index = 0;
for( index =0; index < record.length; index++ ){
this.getView().addRowClass( index, ' ' + record[index].data['itempath'] );
}
}
},

あとは
ダブルクリックなりくりっくなりのリスナーで
これまたレコードから取得してきたパス情報を先頭一致かけて。Alternativeな行がまたちがうCSS
があたってるのでめちゃくちゃですがこれもゴリ押しで。作り直しはまた後日。 ひとまず階層別に
消えたり増えたりできたので親子関係はそれとなく見えるようになった。

onRowdblclick : function( grid, rowIndex, e ){
var record = grid.getStore().getAt(rowIndex);
var data = record.data['itempath'] + '-tree' + record.data['ID'];
var selectClassname = 'div[class^="x-grid3-row ' + data + '"]';
var selectClassname_alt = 'div[class^="x-grid3-row x-grid3-row-alt ' + data + '"]';
Ext.select( selectClassname, true ).each(function(element){
element.toggleClass('system-common-display-none');
})
Ext.select( selectClassname_alt, true ).each(function(element){
element.toggleClass('system-common-display-none');
})
},


明日から仕事。

ネヨー。

2009年8月4日火曜日

ExtJs-51 Ext.Elementにようやくその4(TreeGridもやめ)

はっ
と気づくと何もせずに1Wたってまう。

ものすごく疲れやすくて自宅でも何もせず。。
でも今日は久々に。

前の続きで
親ID、子IDのテーブル構造で
親子関係を示したい。ってことでした。
TreeGridを見てみると孫とかその辺の実装を変更するとめんどくさそう。

で、結局そんな大変そうじゃないし自力で実装しよー!と先ほど決めました。

親子関係のテーブルを階層化するストアドのサンプルは入手できて大方
カスタマイズしたのであとはもう少しのつめをすれば
階層パスを取得できる。

でも眠いのできょうはここまで。

2009年7月24日金曜日

入院から一年

ふと一年前ってなにしてたんだろーってよみかえしたら

アレ。何日入院してたんだ。


から一年。
まぁいろいろあり。
膀胱炎?痔?前立腺炎?のどれかになりかけたが
たまに出る蕁麻疹以外は正常。って異常なのかな?

本当に健康、普通ってのがいちばんですね。はよねよ。

ExtJs-50 Ext.Elementにようやくその3(階層DBの変更はやめ)

22日の勉強会は体調不良にて欠席することになりました。
本当にものすごーくたのしみにしていたのでへこみました。
参加枠からもれてしまっていた人、ごめんなさい。


さて、出ましたExtJs本
早速、Amazonにて購入(とどいてませんが)。おそらく既知の内容になると思うのですが
ExtJs好き(なんだそりゃ)としてはもう早く読みたくて仕方ありません。
早く届かないか待ち遠しいのですがもうすでに資格の本あわせると5冊平行読み。
なんだかわけがわからなくなってきます。。。

で、本題。
先日、階層構造DBを変更してGridにTree構造を持たせようと画策してました。。
お題「Ext.Elementにようやく」のくくりはTreeを攻略しがてらGridへ移植
するってのものかねようとおもってたんですが
ふと先日のWorkshopFinalで
Ext3.0のhttpproxyのconfig「api」で各種URL指定ができるってきいていたので
あ、Extのバージョンあげな。とサンプルとデモを眺めてたんです。。。。。



TreeGridがある!!。
これでできるじゃないですか。



それも今までのDB構造からTreeLoader向けのJson吐き出す機構はすでに
くみあがっているのでそのまま使えるし。

ということで階層DBの再設計作戦は白紙に戻して
上位IDをかかえる形での構造で行くことに決定。

でもElementシリーズは続けてグリッドにガントチャートの線をFromTo指定で
ひく勉強を。。


『絶対「間に合う」仕事術』よんでる最中、はやく実装したい感が湧き上がりました。
モチベーション維持も。。



あ、あと会社でお世話になってるクールな同僚にDataTierGeneratorを紹介してて
つまづいたので追記した。。。ExtJs-31 DataTierGenerator(DBの照合順序)

2009年7月20日月曜日

ExtJs-49 Ext.Elementにようやくその2(階層DB)

昨日は疲れがでたのか早々に寝てしまい。

今日は先ほどまで寝てしまい。

明日は会社のためもう寝ます。

が、

階層構造をCSSで動的に付与するために
テーブル構造を
ID,上位ID,リーフかどうかの判定用フラグ
なんてやってたのですが、
どうもいけてない感たっぷりなのでぐぐったらすぐに。
包含図で考察する方法がありました。
ものすごく丁寧に解説していただいたのでSQL初心者な私でも理解できました。
これを汎用的に実装しておいて
WBS以外の部署関係等も含め包含の管理を実装しよう。

まずはストアドの作成とDataTierの実装を。
するっていうことを決めて今日は寝る。

2009年7月19日日曜日

ExtJs-48 Ext.Elementにようやく

今日から三連休夜のひと時が取れる。
少しだけ今までてが出せてなかった部分に。
・Elementの操作(基礎だろ、という突っ込みは無しで)か、
・Xtemplateを。どちらにしようかと。
で、Elementに成りました。

なぜかというとタスクの階層構造を作りたく。。。
最初はGroupingGridViewをどうにか入れ子にして
階層をつくりゃ手抜きでいけるか。と考えるも。

そのグループの進捗とか管理できないではないか。
やはりGridViewだわ。
ということでTreeViewとGroupingGridのcollapsedの仕組みの理解と
階層による+-記号とインデントの付与を自力で実装しなければならないのかな??

・CSSの切り替えなんですね。
 x-grid-group x-grid-group-collapsed
.x-grid-group-collapsed .x-grid-group-body{display:none;}
 ってなってる。
 で、表示はzoom:1って。

 これに倣って実装すりゃいいのかな。

GridVeiwのヘッダの+、-記号の切り替えは
+、-の記号は
9X100の領域に上の方に+、下のほうに-ってなってて、
それをわけてるんですね。
.x-grid-group-collapsedのときは+を表示するから
{background-position:3px 3px;}
-は下の方を使うから
{background:transparent url(../images/default/grid/group-expand-sprite.gif) no-repeat scroll 3px -47px;}

でいいのかな。

クラス指定でその配下の要素をつぶしたりしているのであれば
Grid生成時の子要素生成時なり生成後なりに付与してあげなければならない。
これもなるべく手抜きで。

指針は
・既存のGroupingの機構をそのままGridへ移植。

これで行こう。
で、
①現状調査
 Gridの各行のCSS状況を。
 行は、 alternate含めるとこの二行に集約されるわけで。
②CSSの書き換え
 GroupViewのCSSを当ててみるテスト
③階層の実装
 イベントの実装
④多段レベルへの展開。
ってこんなことせずに、普通に消すときゃdisplay:none;出すときゃzoom:1にかえればいいんだ。って気が付く。

階層を判別するようのクラスを付与してあげてね。
それもちまちまやらず、
これも先日、小堤さんから教わったCompositeElementで一気に解決。っていくのかな。
良い勉強がてらにちょっくら触ってみよう。

まずは男らしく、偶数行を消してみた。
Ext.select( 'div[class="x-grid3-row"]', true ).each(function(element){
element.setStyle({
display: 'none'
});
});
うわぁおもろ。きえた。
で、altの方も。
Ext.select( 'div[class="x-grid3-row x-grid3-row-alt"]', true ).each(function(element){
element.setStyle({
display: 'none'
});
});
おお。これで全部消えた。

今度は表示だからremoveすりゃいいのかな。とAPIリファレンス見る。。
って、ちょっとまて、
toggleClass ってメソッドあるじゃん。

これでやればいいんだな。くらす指定だから、
display:nome;をクラスで定義しておいて。。

.system-common-display-none
{
display:none;
}



Ext.select( 'div[class="x-grid3-row x-grid3-row-alt"]', true ).each(function(element){
element.toggleClass('system-common-display-none');
});

を実施。

うまくいった!と思いきや、トグルしない。なぜだ?
あ、Addしてるんだからselectのクラス指定が変わらんといかん。

Ext.select( 'div[class="x-grid3-row x-grid3-row-alt system-common-display-none"]', true ).each(function(element){
element.toggleClass('system-common-display-none');
});

愚直だとこう。

あ、うまくいった。
でも芸がない。「^=」で接頭一致で実施。

Ext.select( 'div[class^="x-grid3-row"]', true ).each(function(element){
element.toggleClass('system-common-display-none');
});

ほら来た。
できた。

あとはDBから持ってきた階層構造による動的なクラス名付与と
トグルの実装をやってあげればOK.
インデントとアイコンも変えなきゃね。

すげーすっきり。
明日はもっと理解を深めよう。
ってもう午前1時半だ。やべ。

2009年7月11日土曜日

ExtJs-47 本が届いた

待ちにまったExt本の第二段が届いた。
あれれ?発売日は20日に成ってたんだけど。

二部構成で。
LearningExtJSの続きってわけじゃないんだけど、一部はutil系の説明を。
59ページにあるExtJsのオブジェクトモデルマップはぱっと見、
わかりやすくて面白い。
あとは例のごとくサンプルバリバリのってて読みやすく、
英語がしょぼい私でも容易?に読める?理解した気になれる?ので楽しい。
ってまだ流し見だけど。

二部はプロジェクトの紹介をどばーっと。
Chapter4にあるTimeKeeperExeってやつはまさしく今つくってる
Todo管理用ツールの要素満載。
というよりもベースがもろこれに成ってしまう。

ハードコピーがたくさんあるのでばらばら見て、
「あ、こんな実装したかったんだ」的なきっかけから
本文をみる半サンプルリファレンス的な位置づけで。

LerningExtJSになかったXTemplateについてものってるし。
これは小堤さんが解説してくれてたままなので英語でも
やんわり理解できるレベル。
でも日本語本があればうれしいなぁと。
ってそういえばでるっつってたかなぁ。。。

しかし本買いすぎ。借りすぎ。
読む時間が。。。

2009年7月3日金曜日

ExtJs-46 EditorGridPanelで怪我の功名

先日、EditorGridPanel云々。ってセルごとにやってたけど、
通信のオーバーヘッドが気になるし、
今ひとつなれない。
やはり使い手側が保存の契機をつかんでおきたい。
ので保存ボタンをつけて。

それはうまくいくのだが、
今回のお題が意味するのは

「編集が反映されない」のである。
あれれ?何でだろ。configの設定かな?とリファレンス、サンプル見るも
問題なし。

やはり行き着くのはExtソース。
EditorGridPanelで見てみました。
line33721あたりでコンプリート処理してるんです。
で、
値が変わってて、
バリデータにもかからず、
きゃんせるでもなかったら

レコードのフィールドへセット!

ってあれー?

つまり、フィールドが取れてないんじゃないのか?と。
console.dir()とかいれてフィールド情報見てみたら案の定、
undefined.さん。

で、このフィールド値、さかのぼると
getDataIndexメソッドにカラム番号入れて、、内部ではconfigに設定された
dataIndexとってきてる。

あれ?ちゃんとせっていしてたんだけどな。。。
と、
見直すと
「I」が小文字になってるし。
ああ、そうですか。そうですか。

ということでcolumnModelの定義を全面見直し。
みんな小文字でやんの。

おかげでずーっとほったらかしておいた

「ソートができない」件も無事解決。

これでGridPanel、EditorGridPanelをサーバサイド
含めてある程度使えるようになったわけで。。。

configでたまに陥るワナ。
ビールのみながらだと特に危ない。
エラー起きないし。

でも良かった。

2009年6月30日火曜日

ExtJs-45 EditorGridPanelのコールバックって、ああそうか。

少しやるきになってきたのか、通勤途中の電車以外にも
家で隙間時間でコーディングをするように。

さて、実績を入力するのってダイアログ出したりするのは手順が増えるのでまどろっこしい。
ということでEditorGridPanelで。

毎度のことで、InitComponentで
リスナー登録。
this.addListener('afteredit', this.onAfterEdit, this, null );

で、リスナー作成
onAfterEdit : function( e ){
var data = e.record.get('ID');
//console.dir(e);
Ext.Ajax.request({
url: this._writeUrl,
success: this.onAfterEditSuccess.createDelegate( this ),
failure: this.onAfterEditFailure.createDelegate( this ),
params: {action:'update', ResultDate : App.TaskManagement.Result.daySelectCtrl.value, ResultId : taskId }
});
},
onAfterEditSuccess : function( response, options ){{
alert('onAfterEditSuccess');
//commitするのか?
},
onAfterEditFailure : function( response, options ){{
alert('onAfterEditFailure');
//rejectするのか?
},
ちょっと待てよ、commitするのもrejectするのもイベントオブジェクトが必要。
って、いままでの実装からSuccess、Filureを別めそっど定義してたから。
JavaScriptは関数スコープでしたね。
直接書いてやればよいのかね。

onAfterEdit : function( e ){
//console.dir(e);
Ext.Ajax.request({
url: this._writeUrl,
success: function( response, options ){{
      //サーバ登録OKなのでコミット。
e.commit;
      },
failure: function( response, options ){{
//サーバ処理NGなのでりじぇくと。
e.reject();
},
params: {action:'update', ResultDate : App.TaskManagement.Result.daySelectCtrl.value, ResultId : e.record.get('ID') }
});
},

これで動くかなぁ

あと、通信するときに
var connection =Ext.data.Connection();
connection.request({
param:....
},
.......
って本でやってたけど大きな違いはまだ見てない。
個人的には非同期だぜ。ってわかりやすく、Ajax云々って。。。

あれ?
しらべよっと。

2009年6月27日土曜日

久々のデスクトップPCでの開発

勉強会、WorkShopに参加したおかげで
やる気が起きて自宅での開発を。と。
しかしEeePCにDBつくってるもんだからこんな有様。
夜風に当ててないとEeePC熱持ってしまって
かわいそうなことに。

2009年6月26日金曜日

ExtJs-44 DataView

Extjs workshopに参加してきました。
ものすごーく、ずーっと参加したくて
ようやく半年ぶりに参加することができました。
途中からでしたが。

昨日の勉強会でスピーカだったDeginoの徳冨さんも
ご一緒でした。

今日はDataViewについて教えてもらいました。

ASP.NETで言うところこのItemTemplate≒XTemplate
であとのデータモデル部分の設定実装方法はDataGridと一緒。
っていう位置づけで聞いてました。
だからすんなり説明が入りました。
が、

XTemplate。
これがいままでどうもようわかっとらんかった。
画面を整形するのにそろそろ本腰入れてやるかと
思ってたところ、小堤さんがせつめいしてくれたので
目からうろこでした。ものすごくわかりやすく
ものすごーく欲しいいいところに情報が入ってくれました。

もっとはじめからしっておけばよかったな。。

で今日の書き込みはソース無しで。

あと
DataGridを複数並べてヘッダと内容がずれ込んだら
forcefitを疑うってことをまなんだ。


今日はここまで。

次の実装はしばらく先になりそうだから
この先の手順を忘れずに。
・実績の報告用Dlg作成
・実績の合計計算()
・実績の指定目アドへのメール送付
・ux.Flotを使用してのチャート。かExt3へあげてのチャート

2009年6月23日火曜日

ExtJs-43 コンテキスト

はて、Extの実装ネタはいつ振りの投稿でしょう。

自宅での実装はほとんどせず、会社帰りの電車でぽちぽち。と。
そんな具合だからいっこうにすすみません。
フラストレーションが少しづつたまりますね。。。

さて、今日はコンテキスト。
ようやくドラッグアンドドロップを実装し、
登録はできた。グリッドからこんてきすとで削除したいじゃないですか。

ということで。
・initComponentでリスナーを登録
this.addListener('rowcontextmenu', this.onRowContextMenu, this, null );

・リスナーの作成
onRowContextMenu : function( grid , rowIndex , e )
{
var record = grid.getStore().getAt(rowIndex);
var id = record.get('ID');
menu = new Ext.menu.Menu(
[
{
text: 'このタスクを予定から削除',
handler: function(){
grid.deletePlan( id );
}
}, {
text: 'この表全部のタスクを削除',
handler: function(){
alert('実装中!');
}
}]);
//システムコンテキスト解除
e.stopEvent();
menu.showAt(e.getPoint());
},
こんな感じで。

できたよー。さっくり。
ExtJsの小堤さんから勉強会、ワークショップで基礎を教わり、
こつこつ勉強会に参加して完全にJavaScript未経験者な私も
ほんの少し成長した感が。
うれしいですね。
もう少しで第一フェーズ終了かな。

Grid、DD、コンテキスト(メニュー)、ツリー、ポートレット、、、
あとは画面の整形をしたらプロトタイプは完了。
汎化作業へ。
汎化が終わればサーバサイドも汎化して。

いよいよシステムの自分向けツールの本格開発へ。

先がものすごーく長いね。
白石さんのZDNetで見たGoogleプラクティスを知ってから
何年たつんだろ。学習、よくつづくな。しかし。
そういえば本を購入させてもらいました。gearsの。
夢広げていただきました。


で、ながーい目で開発していこうと改めて認識。

2009年6月18日木曜日

Android-1 環境

さてただでさえ少ない20%リソースは
ExtJsだけにはとどまらずAndroidでも消化するって
ことで始まりました。

またもやオライリー本を購入。
はじめてアンドロイド。

「数独」作成を通してひととおりのことを教えてくれる。
読みやすい本でした。
夢広がったー。ってことで、
・本は買いました。

次に環境。
自宅のメインPC(DELLのやつ)にと。考えたけど
結局EeePCばかりつかっているのでそちらに作るようにした。

ネットブックが完全に開発マシンになったわけで。
ってDBサーバWEBサーバになってる時点でそうか。

・Javaを
・EclipseをGanymedeのJavaをせんたく
・AndroidSDKを

もちろん全部 Dドライブへ。
日本Androidの会(日本アンドロイドの会)
Top / 勉強会 / インストールガイド/インストールガイド
を元に実施しました。ありがとうございました。

風邪気味なので今日はここまで。

2009年6月16日火曜日

GDD2009で

勉強のためにGDDに参加。
そう、Andorid開発に浮気してみるテストをしようと。

本も買ってたし。

で、さんかしたら、

携帯クレタ。

すげー。うれしい。
いまつくっているつーると連動させてみるテストをしたかったから
なおさらうれしく。

でも時間がないね。

しかしソフトウェアキーボードには慣れない。

ExtJs-42 経過????

経過している。
時だけが。
 
なかなかうまくすすまず。
最近、夜更かしができなくなってきてぜんぜんやってないなぁ。
っというまに時間が。

予定用のグリッド複製して実績用のグリッドを作成した。

このツール、今となっては一日、二日でできるよな。たぶん。。
まとまった静かな時間が欲しい。
===============

アンドロイド携帯からてすと

オオー。
添付も。

2009年5月31日日曜日

Javascriptのサイ本を買ってもう一年。
ほんの少しだけ変化はあったかな。

2009年5月26日火曜日

睡眠

平均睡眠時間を以前から調整するようにしてる。転職前は4時間から5時間。疲労が蓄積するなぁ、と感じてきたので6時間にしてみた。

ものすごく気分がよい。
モヤモヤがない。


ので記す。

2009年5月20日水曜日

ExtJs-41 経過

とりあえず、いまのところはここまで。
まったく使い物にならずこまるなぁ。
はやく使いたい。今年中には使い始めたいな。

できあがるのかな。。。




歯ブラシ口に入れたまま1時間以上いたら口がつりそうになった。

ExtJs-40 DDの事始め

ようやっとTodoリストがぼろぼろながらも登録、更新が
できるようになったから
グリッド二つ並べてDDで予定を立てられるようにしようと。
レイアウトはサンプルを参考にしてOK。
左にTodoリスト、右に同じカラムも出るの空グリッドを配置。

でも、
おやや?Dropができない。というよりDropの領域がない。

autoHeightがtrueでした。空だからつぶれる。→DropZoneがなくなる。

なるほど。

そんなこんなで15日ぶりに開始し、DDまでの実装は完了。
このあとはDrop時のイベントリスナにてExt.ActionでIDをPOSTして
予定情報に登録。

も少し。

また半月後かな。。。

2009年5月5日火曜日

ExtJs-39 継承

クラスの継承、今まではPreConfigクラス的な位置づけで
Configをあらかじめ設定して特化した実装をしていたので、

App.TaskManegement.TodoBasicGird.TodoListGrid = Ext.extend( Ext.grid.GridPanel, {
initComponent : function() {
//superclass call
App.TaskManegement.TodoBasicGird.TodoListGrid.superclass.initComponent.call( this );
//----------------------------------------
// columnmodel
・・・・・・・
なんて形でやってたんだけど、
このグリッドの表示設定等を別途設定オブジェクトを使用して
外から指定してやる必要が出てきた。
つまり
独自のメンバを持つ形での継承。で。
いままでテスト的に試しながら固定実装してきたのでこれが必要なかったんだな。

で、どうすんだろ。とExtのソースを眺めてたらそれとなくあって
結果、

App.TaskManegement.TodoBasicGird.TodoListGrid = function( config ){
this.dataConfigObject = {};
Ext.apply(this, config);
App.TaskManegement.TodoBasicGird.TodoListGrid.superclass.constructor.call( this );
}
Ext.extend(App.TaskManegement.TodoBasicGird.TodoListGrid, Ext.grid.GridPanel, {
・・・・・・
てな形に落ち着いた。

実装調査を終えたところで明日からいよいよ
予定機能(しょぼいけど)の実装開始。。。
Todoリスト実装、中途半端だけど。。

2009年5月4日月曜日

ExtJs-38 dirtyについて2

このあいだ
ExtJs-36 dirtyについて
でやった実装、今の実装のままだと初期化時に問題が。

閉じる処理はダイアログのインスタンスを残したまま非表示にして
新規作成時→Reset
ロード時→ロードした情報
ってことになってたんだけど、

originalに入れるもんだから
新規作成時、前回ロードされた情報がのこってやんの。
Resetすると当然、Originalデータが入るわな。

Resetメソッド実装するか。。。
ちょっとだけめんどい。。。

ほらやっぱりわすれてた。

久しぶりの開発で自演浦島太郎になってたので
「あー、そんなときのこのブログ」
ってよみかえしてたら

ExtJsのブログの最初のほうにやってたこと。
すっかり忘れてた。

なんだよポータル画面なんてやってたんだ俺。
ソース掘り起こして(どこにやってしまったか。。。)
SVNから引っ張ってこないと。。

そんなねたもあり、ぶれそうなのでひとまず
開発の方向性を再確認。

・事象を残せるIFを持ったグリッド+ダイアログを作って
・計画と予定と実績を切り分けて
・実績からメールを配信

と、フリーの全文検索でからの各種情報へのIF
と、ポータル画面の作成

これはすべてExtでつくること。
ってかんじだな。

と、それをAndoroidからもつかえるようにJavaの勉強も。

ExtJs-37 しょぼすぎるはまり

あー、半月以上ほったらかしてしまった。

業務の都合上、
Ext 勉強会に出席できず気がついたら不参加の連絡もしていなかったことに
後日気がつき
申し訳ない限りです。

GWに入ってようやく時間がとれたので久しぶりにさわり、
チョコチョコと修正とかほったらかしていた部分を修正し始めたんですが
一点、コンボボックスがうまく表示されない部分があり、
小2~3時間、右往左往しておりました。

結果、
マスターテーブル上でのフィールドがnchar(10)ってなってて
データは7桁のID。3桁分スペースでパディングされてて
トランザクションテーブル上のフィールドはnvarcharで(8)
ってなっててこれまた10桁の情報を8桁に切り詰めて格納されてて
それじゃ、一致しないわな。


てきとーにふわふわと半月周期で作ってるとたまに陥る。このワナ。
しかしよく飽きずにつづくなぁ。と。

2009年4月17日金曜日

ExtJs-36 dirtyについて

先日のバリデータの応用で
ふぉーむでdirtyかどうかを判断して、閉じるときに
「あ、変更しちゃってるけど、保存して閉じるけどいいの?」
って聞きたい。
ので
Close時に

panel.getForm()で取得して
isDirtyをしよう。

×
うまくいかない。変更しても、変更しなくても引っかかる。。
調査:
一個ずつダンプしみる。
どれもこれも引っかかる。

オリジナルと比較すんだよな。たしか。
ロードしたじょうほうはデフォルトじゃないな。確かに。だからだ。
ってことでExtjsallをのぞくと。。。
ありました。

initValue。
domか、getvalueら持ってきてオリジナルに入れる。
これはフォームではなくフィールドのめそっどなので
ロードごにぶん回して呼んでみる

だめだった。

とこの間はここまでだった。
今日はそのつづきで。

さて、、
うーんとinitvalueがprivateメソッドだってことがわかり(ExtJs3.0でコメントに)、
さてじゃぁどうするかと。
そういえばデフォルトってvalueにいれてて、
afterrender後の
initEventで
getvalueしてoriginalValueに格納されてる。
というかロード後のいべんとでoriginalValueにgetValueの値をセットしてやりゃいいわけだ。
で試してみる。

つーかこれはinitvalueこのじっそうだよな。。。

じつは
この実装は、ロード直後にやってたことに気がつく。
これじゃうまくいくはずがない。
だからAction.loadのSuccess時のCallBackでやりゃいいのかな?

あーうまくいったよー


callback_load_success: function( form, action )
{
form.items.each(function(field){
// ロードした情報をオリジナルとする。
//alert(field.originalValue);
field.originalValue = field.getValue();
//alert(field.originalValue);
});
},

onCloseClick : function()
{
//dirtyな情報をチェックTODO:summaryと冗長性あり。
// alert( this.getForm() );
// if( this.getForm().isDirty() ){
// System.Common.MsgBox.showConfirmYN('保存確認', '情報が変更されています。保存しますか?', this.closeConfirmFunction, this);
// }
////これだとなにが変更されたかわからん
var isDirty = false;
var dirtySummary = ''
this.getForm().items.each(function(field){
// なかで情報取得してチェックしているので
if(field.isDirty()){
//
dirtySummary = dirtySummary + field.name + '
';
isDirty = true;
}
});
if( isDirty )
{
System.Common.MsgBox.showConfirmYN('保存確認', dirtySummary + '情報が変更されています。保存しますか?', this.closeConfirmFunction, this);
}
},

これで、閉じるときに保存確認ができるようになった。

2009年4月13日月曜日

ExtJs-35 validateについて

今日は少し時間が取れました。

ASP.NETのvalidatesummary?みたいに集約してエラー出したいなって場面が出てきました。
画面構成上、タブパネルで入力させるかたちになってるんですが、
ほかのタブに必須項目とかあると集約したエラー情報がないと
背面のタブで発生しているエラー情報が見えないわけで。
フォーム中のバリデータに引っかかったものってアンダーラインで表示されたり。
でわかるんですが、
一部の方々は「なんじゃこの赤いアンダーラインは?」
で思考がとまるケースもあるんじゃないかな。。。
そのためのqtipに出してもそうなるばあいもあるんでしょうね。多分。


で、summaryに吐き出すみたいなことってできないのでしょうか?
ってことでデータを覗いてみるテスト。
ExtJs内部でもform.items.をぶんまわしてvalidateでみて引っかかればfalse
で返しているぶぶんがあったので。。。。
===============
this.items.each(function(f){
if(!f.validate()){
valid = false;
}
});
//フィールドf.validateって
getRawValueで持ってきてチェックしている。
===============
ってことはそれを捕まえられればいいわけだ。
①イベントを調べよう。
②フォームの中を見てみよう。
となるわけです。

①APIリファレンス見ると、、actionfailedってやつがありました!!
ですのでFormPanelのInitComponentで
this.on('actionfailed', this.onActionFailed, this );
こんな具合に登録を。

②に中をのぞくってことでイベントリスナーの実装で。
まだテストじっそうなので煩雑だけど一応こんなかんじなんだろうな。
onActionFailed: function( form, action )
{
var invalidateSummary = '';
//フォームのアイテムを回してだめなやつのinvalideTextを参照する。
form.items.each(function(field){
// なかで情報取得してチェックしているので
if(!field.validate()){
//
invalidateSummary = invalidateSummary + field.name + ':' + field.invalidText + '
';
}
});
  }

あとは一番最初に引っかかったコントロールにフォーカスをあわせてやる。
ってことでどうだろう。これをプラグインにしてサマリコントロールとして汎用にしてとか。
これはまた後日。

ちょっとすっきりした。

2009年4月7日火曜日

ExtJs-34 イベントについて

Ext勉強会で教わったことを
やってみようと思って取り込んでみた。

今の構成って
・GridPanel
・Dlg(Window)→Panel→FieldSet
で作ってて、

勉強会でやってたアプリケーションのフレームはまだまだ先伸ばし
にしてる。計画ではGridと詳細のダイアログのCRUDプチフレームワーク作って
その跡にアプリケーションの側を。と。

だから勉強会でやってたAppクラスの代わりに
イベントマネージャクラスみたいなのを作ってそこで管理するようにして
ひとまず固定値で特化したつくりにして突っ込んでみた。
と、動機と現状と構成を。

忘れそうなのでとりあえず概要を残しておこうと。。。

①まずはイベントマネージャクラスを作っておいて。
System.Common.EventManager = Ext.extend( Ext.util.Observable, {
constructor : function() {
// イベント定義
this.addEvents('TodoRegisterDlg_executeClose' );
this.addEvents('TodoRegisterFormPanel_Reset' );
this.addEvents('TodoRegisterFormPanel_Submit' );
this.addEvents('TodoRegisterFormPanel_Load' );
this.addEvents('TodoRegisterFormPanel_CopyNew' );
}
});

②ダイアログクラスに引き渡す。
//TODO:暫定配置
App.TaskManegement.TodoBasicGird.eventManager = new System.Common.EventManager();
//----------------------------------------
// create detail dlg
//----------------------------------------
var todoListgrid_createDetailDlg = function( id )
{
// Dlg設定
if( App.TaskManegement.TodoBasicGird.detailDlg === undefined )
{
App.TaskManegement.TodoBasicGird.detailDlg = new App.TaskManegement.TodoRegisterDlg({ eventManager : App.TaskManegement.TodoBasicGird.eventManager});
}
// load設定
if( id != undefined && id != '' )
{
//App.TaskManegement.TodoBasicGird.detailDlg.load( id );
//イベント発火
App.TaskManegement.TodoBasicGird.eventManager.fireEvent('TodoRegisterFormPanel_Load', id );
}
else
{
//コントロールの初期化
App.TaskManegement.TodoBasicGird.detailDlg.reset();
}
App.TaskManegement.TodoBasicGird.detailDlg.show();
};

③ダイアログクラスから内部で使用するパネルクラスへ引き渡す。
App.TaskManegement.TodoRegisterDlg = Ext.extend( Ext.Window, {
initComponent : function()
{
//イベントリスナ登録
this.eventManager.on('TodoRegisterDlg_executeClose', executeClose, this );
Ext.apply( this,
{
closeAction : 'hide',
tools : todo_tools,
title : 'タスク情報編集',
width : 980,
height : 400,
bodyStyle : "padding:0px",
items : [ new App.TaskManegement.TodoRegisterFormPanel({eventManager : this.eventManager})],
eventManager : this.eventManager
});
App.TaskManegement.TodoRegisterDlg.superclass.initComponent.call( this );
},
executeClose : function()
{
App.TaskManagement.TodoRegisterDlg.superclass.close.call();
}


});

てな具合で。
流動的な部分の切り出しなんてまだまだ先だな。
というか、ここのところ時間が取れていないなぁ。
このままだとExt勉強時間が2~3時間/月になってしまう。

趣味のプログラミングなんてこんなものか。。

2009年3月22日日曜日

ExtJs-33 ComboBoxのデータ

転職活動でばたばたで参加してなかった
ものすごく久々にExtJS勉強会に参加しました。
-----
WorkShopにもそろそろ復活しようかと。
-----
さて、今日はビール片手にえらく久々にExtJSをさわってまして、
今日はComboboxを。DBから持ってきた値で実装。と、例のごとくです。
ユーザ情報のマスタとプロジェクト情報のマスタと二つほど
Comboboxコントロールを作ってました。
先日買った本をよんで、ふむふむ。と。
で、
-----

Commboboxのコンフィグで

displayField
valueField

なんてあるから

あ、表示はdisplayField
で選択されたデータの紐付けは
valueField
で、これでサブミットされる値はOK。ですな。

なんて、早とちり。。
実際、サブミットされるのはtype=textになってて選択
表示されているテキストになってた。
で、あれれ?選択されたIDをサブミットしたいんだけど?
となるわけですが、

http://extjs.com/forum/showthread.php?p=296133

こちらでちゃんと解説していただいてました。。。
hiddenNameにサブミットする名前を設定しないといけないみたいです?

valueField
はサブミットする際の値となるフィールドを指定する。
が正解なようで。

//----------------------------------------
// record
//----------------------------------------
System.Common.Form.ProjectComboBoxRecord = [
{name: 'id', mapping: 'ID' },
{name: 'name', mapping: 'プロジェクト名' },
{name: 'summary', mapping: 'プロジェクト名' }
];
//----------------------------------------
// store
//----------------------------------------
System.Common.Form.ProjectComboBoxStore = new ExtWrapper.Store(
{
proxy: new ExtWrapper.Proxy({
url:'/PersonalGardenSolution/SystemClasses/readControlsData.aspx'
}),
reader: new ExtWrapper.Reader({
root: 'rows',
totalProperty: 'rowsCount',
id: 'ID'
},
System.Common.Form.ProjectComboBoxRecord
)
});
//----------------------------------------
// combo実装
//----------------------------------------
System.Common.Form.ProjectComboBox = Ext.extend( System.Common.Form.ComboBox,
{
tpl: '
{name}
',
typeAhead: true,
store : System.Common.Form.ProjectComboBoxStore,
initComponent : function()
{
this.valueField = 'id';
this.displayField = 'name';
System.Common.Form.ProjectComboBox.superclass.initComponent.call( this );
this.store.load({
params:{category:'SystemCommonFormProjectComboBox'}
});
}
});
Ext.reg('SystemCommonFormProjectComboBox', System.Common.Form.ProjectComboBox );

で、使用するほうでは、
{ xtype : 'SystemCommonFormProjectComboBox', fieldLabel:"XXXX", hiddenName: "XXXX", width:265 }

みたいな。
おお、できたぞ。

2009年3月13日金曜日

まいくろそふとなまうす

会社を辞めるときに
会社の先輩からグレイとなマウスをもらった。

本当にうれしかった。
ので記載。

先日買ったFILCOのキーボードの青色LEDとあう。
画像はまた今度。

とったので掲載。


ExtJs-32 DataTierGenerator(設定について)

DB周りを
DAAB化するってことで入れたのだけど、
実際の設定がわからん。
ぐぐったら@ITでヒット。
やってみた。

EnterPriselibraryConfigurationを起動
(XMLクリエータ的な感じなのかな。。。)
でApplicationを追加して
Applicationツリー配下にDAABを追加して。
ConnectionStringを編集して(これはいままで使用していたやつを。。)

保存。

ここからが
かなりいけてない作業のだが
動かすことを最重要目的としているため、
出来上がったXMLファイルの内容を
一つ一つ丁寧に
webConfig.xml
に移植した。

このあたり、もとのConfig周り含めて仕様をぜんぜん理解してないな。
だからこんな泥臭いことをやってる。
よろしくない。

おいといて。
で、参照の追加で.NETタブのなかにいろんなApplicationBlockが
あるのでDAAB、DAABデザイナを登録しておく。
デザイナがひつようかどうかのきりわけはしてない。し、
これはとりあえず後日。

でDataTierGeneratorで作成されたストアドも登録して。。
実行。。

おー、動いた。

ツールのプロトタイプがかなり立ち上がり早くなります。
よかった。
ってことでDAAB系列についてはいろいろ掘り下げる必要ありだけど
いったん収束で。
Gird+編集用Dlgのパターン実装におけるCRUDは
これでおおむねOKラインとして終えます。
いままで旧バージョンでセコセコしてたのがかなーり便利に。
DataBaseクラスのおかげで自力実装部分もかなり減った(闇に葬られた)し。
メンテが楽で。

いつになるかわからないけど次はLoggingのAplicationBlockをやろう。。
よりいっそうツール作成意欲がわいた。

でも時間が本当にとれないなぁ。。

ExtJs-32 DataTierGenerator(文字コード)

結局ニューバージョンでstreamWriter.WriteLine部分でも
てこ入れしなけりゃいけない。
UTF-8ボム無しになるのはなんとかならんものか。。。と。
デフォルトコンストラクタだとBOMなしなので。。。
結局StreamWriterのコンストラクタを変更してUTF8指定してBOM付で
吐き出すように変更して使用させてもらった。
これでソースはOK。

2009年3月8日日曜日

ExtJs-31 DataTierGenerator(DBの照合順序)

で、いよいよ
DataTierGeneratorでじぇねレートしなおうそうと。。
するとだね。
---------------------------

---------------------------
equal to 操作の "Latin1_General_CI_AI" と "Japanese_CI_AS" 間での照合順序の競合を解決できません。
---------------------------
OK
---------------------------

なんて出るんです。。
なんのこっちゃと思い、Collationの確認するも、masterDBや自分の作ったDBも"Japanese_CI_AS"よ。
うーんと。。と、なるのですが、
テーブル情報を取得するSQL文の中で
INFORMATION_SCHEMA.TABLES

FN_LISTEXTENDEDPROPERTYで作成した拡張情報を
LEFT JOINしてる部分において(equal to)って言ってるからそう判断しただけですが
どうやらFN_LISTEXTENDEDPROPERTYのCollationがLatin1_General_CI_AIで作成されている?
ようで、
COLLATEでキャストしました。ら、うまくいった。

ちなみに確認用に抜粋してみてやったものはこちら。

select * from INFORMATION_SCHEMA.TABLES
LEFT JOIN ::FN_LISTEXTENDEDPROPERTY('ProgrammaticAlias', 'user', 'dbo', 'table', default, default, default) AS ExtendedProperty ON INFORMATION_SCHEMA.TABLES.TABLE_NAME = ExtendedProperty.objname COLLATE Japanese_CI_AS

「COLLATE Japanese_CI_AS」
これね。
ちなみに
ジェネレートする際のSQL文についても同様。に
「COLLATE Japanese_CI_AS」を。



#追記(ぱっと見わからなかったのでまよったため)
・ソリューション構成のSQLフォルダ内にある、
・テーブル情報を取得するSQLの末尾に
「△COLLATE△Japanese_CI_AS」を追記する。

ExtJs-30 DataTierGenerator(EnterpriseLiblary)

で、
そういやDataTierGeneratorってバージョンアップしとらんのじゃんろうか?
と具具って見たら。。。
してました。

2.1.1.スナップショット見たら。VB.net対応してらっしゃる。
自前でやろうかと思ってたところだったから。
というか、
2006年12月って。
俺のバージョンドンだけ古いんだ?
まぁ、もともと引っ張りだしてきた自宅の引き出しがふるかったからなぁ。

で、

EnterPriseLiblary仕様になっててこれまたグレイト。
早速、2008向けのEnterPriseLiblaryをインストール。
いよいよEeePCも本格装備になってきた。
http://www.microsoft.com/downloads/thankyou.aspx?familyId=90de37e0-7b42-4044-99be-f8ecfbbc5b65&displayLang=en

ExtJs-29 DataTierが古かった

いろいろあってDataTierGeneratorのバージョンをアップした。
のでそのいきさつを。


古いバージョンでやってたころ、下記のようなことが起きていた。
日本語テーブル名、フィールド名を使用しできるように
メンバを_で。
と、
自前のSQLAccessクラスに変更したものの、
これは以前のVSの環境で、2003時代だった。

で、生成されたものを2008環境(EeePCは2008)
ではコンパイルできず。
あれれ?
UTF-8だろうがよー。
何でだよー。
とおもい
テキストエディタでも確認。
確認?すると?おや。
BOMなしジャンよ。。
VS2008だとどうやらBOM付でないとこんぱいるしてくれないのか。。

ってことはDataTierGeneratorのStreamWriterに文字コード指定してやらねばいかん。

セコセコと作って
自前のDBアクセスクラスで。、、、

で、そんな面倒なことやってられるか。
やはりDAABでやるべきなんだ。
と。

2009年3月7日土曜日

ExtJs-28 DateField

formatぱらめーたに Y/m/d
で、
実データはDateTimeのToStringでもどすため、 Y/m/d G:h:s
となる。

ので反映されない。formatにY/m/d G:h:s
って書くと 2008/12/31 0:00:00となってしまうし、..
これを自力でフォーマットするのはあほくさい。
調べたら。
あった。
altFormatぱらめーた。
これにY/m/d G:h:sを指定してOK!!
よかったー。

2009年2月22日日曜日

気が付けば

このブログ、なんで立ち上げたんだっけ?
と思えば転職。

で、また転職。
いろいろあって立つ鳥あと濁しすぎなかんじですが
かなり厳しい状況で。
疲れたなぁ。いろいろ。

毎日毎日を追われるように過ぎ、
ExtJsも触れず、
WorkShopにも出れず。
もやもやがたまったのでPCデポで自分へのご褒美ってことで
キーボード買った。
もともとREALFORCEのキーボードほしかったんだけど
予算オーバーだし。
そのつぎってことでFILCOのマジェスタッチ。
シャコシャコ音はするものの、メカニカルなカチカチとは言わず。
うち心地も良いし。
良かったと。

でも、このPCの前に座るのも久しぶりだな。

最近はEeePCが頻繁ですし。
会社の仕事をする際に使用する程度。
その頻度も少ないし。

で、気が付けば入籍記念日。
もう七年目だ。
子供生まれて転職して家建てて子供生まれて転職して入院してまた転職して。。。
そろそろ息切れしそ。

2009年1月23日金曜日

ExtJs-27 FormPanelのロード。。



久々なのでおさらいを。
過去でひっかかったのは

■継承時のパラメータの設定時、
xtypeでitemsを指定する際はそのxtypeのクラスの
itemsも含め
パラメータで指定するのではなく、
initComponet内でthis.items=
で指定しないとaddItemsでエラーがおきてしまう。。

■Gridは、
・storeを作成
・columnmodelを作成
・readerを作成
 →コールバックを作成

store、columnmodel、readerをGridPanelに設定し
autoloadをtrue、またはreaderのloadメソッドをrender後に呼び出す。
コールバック関数内でdolayoutを呼び出す必要あり???

さて、Gridについてはおおむね落ち着き、
つぎはEditorGrid。なんで、これはおいといて、






FormPanelの基本実装の勉強を。

BasicFormより継承されたクラスは
getFormメソッドにてBasicFormを取得できる。

BasicFormは
Action.Load
Action.Submitを実装しているため
このAction.Loadを利用してフォームへデータを流し込む

■FormPanelにReaderを設定する。
 ReaderのcolumnModelにデータマッピングを設定する
 name: mapping: の連想配列

 Panelの各コントロールにnameパラメータをつける
 これがReaderで指定したcolomunModelのnameと一致してる
 必要がある。

 これでコントロールとデータの紐付け設定は完了

■FormPanelにurlぱらめーたでJSON返却するURLを設定しておく

■FormPanelをインスタンス化して、getForm.Load()で
 データロードが開始される。

Gridでもそうだが、
JSONの形式に注意。
Action.Loadの仕様に基づいて
{
success: true/false,
data:/*ここにでーた配列*/
}
な形式でJSONを返却してやること。
で、
---できた!!---
テストデータ図中のタスク名の部分。


これはあまりつまづかなかったな。
家族が寝た後のほんの1時間。。
むちゃくちゃ久しぶりに自分のリラックスじかんが取れよ。。

あけましておめでとうございます。

2009年明けました。
もう1月も終えますが。

ExtJsの年として一年長々とやっていこう(去年はなんだったんだよ)
と意気込んだのですが、

家族がむちゃくちゃ体調不良でもうなんだか
きぶんがへこみます。

家庭と仕事と24時間を二重の生活をしてはや一週間。。
もうそろそろしんどくなってきました。

PCにも触ってないし。
仕事もおろそかだし。。
つらいです。
と、ぐちってすっきりしたところで久しぶりのExtJsを。。。