投稿

5月, 2014の投稿を表示しています

JavaScript の Window オブジェクトからExtjs のインスタンスを取得する方法

現在、window.postMessage() を使って、ブラウザのタブ間で連携を行っています。 タブ間で連携するので、window.open() を使って、タブを新規作成するのですが、戻り値は タブのwindow オブジェクトです。 逆に、window.postmessage のイベントwindow.addEventListener("message", hoge); の hogeメソッドで受け取るevent 内に、呼び出し元windowオブジェクトが含まれています。(event.source) という訳で、windowオブジェクトから、Extjsのインスタンスが取得できると、両方でのやり取りが簡単になります。 という訳でやり方: window.Ext.ComponentQuery.query('hogehoge'); tab.Ext.ComponentQuery.query('hogehoge'); や event.source.Ext.ComponentQuery.query('hogehoge'); も可能 この処理で、Extjsのインスタンスが取得できます。 もちろんこれは配列で帰ってくるので、[0] などの配列インスタンスを取得して下さい。 ただ、やりすぎるとどこから動いているか分からなくなるので、独自ルールを作っています。 window.Ext.ComponentQuery.query('viewport')[0].fireEvent('XXXXXX'); こうする事で、必ず viewport でイベントを発生させることが出来ます。 イベントなのでコントローラーで受け取れ、処理も出来ます。 外部からは、必ずViewportのイベントにすることにより、処理の流れが多少見やすくなります。 (私はViewport用のコントローラーはほとんど何も書いて無いから特に分かりやすい) 何かの参考になれば…と思います。 (私は忘れないために…) 検索用:Extjs4 window オブジェクトから Ext 呼出し インスタンス 取得 タブ データの受け渡し

Git で困った事、考えたことのまとめ

・Gitのブランチは、1ブランチ1PC(名)で開発する事。  1ブランチを複数PC(名)で開発すると、α側でpush したタイミングで、β側はrebase しなければcommit、pushが出来ない。  逆に言えば、複数PC(1名)の場合、α側で開発後(中途半端でも)必ずpushし、β側で開発前にpull することで解決する。  (1人だったら、マージも簡単かもしれんが…)  そう考えるとWebの場合、下記のパターンで開発するのが良いかも?  A. 1.UIとサーバーとSQL等(縦割り)で機能を分断し、人毎にブランチを作成する。    2.各機能が完成した時に、機能毎にブランチを作成しマージする。    3.マスターブランチには、2.でテストした機能毎にマージする。  B. 1.機能毎(横割り)にブランチを作成する。    2.他人事のブランチは機能内で適当にやらせる。    3.マスターブランチには、1.でテストした機能毎にマージする。 人を主体にするか、機能を主体にするかの違いだけだが、個人的には重要だと思う。 ただ、どちらにせよブランチと機能を紐づけると、細かくなりすぎるので管理が難しくなる。 2014年4月時点: Gitを使って数か月だが、個人的には、日本人の管理方法・プログラマの能力等々を考えると、Gitは扱いづらい。 逆に言えば、個々のプログラマの能力がとても高ければ、とても使いやすいものになると思う。 ま、日本はプログラマ軽視社会だから、無理だろうけどねぇ… 2014年5月21日追記: ネットをさまよっていると、「1つのブランチを1人で作業するなら…」的な記述を目にすることがあります。 何で「1人1ブランチ」の概念に行きつかないんだろう…?何のためのmerge機能なの?何のためのrebase機能なの? そもそもGitって、1機能毎にブランチを作成するもんじゃないの?1つのブランチが数週間以上も稼働し続けてる時点でやり方間違ってるでしょ… とか思ってしまいます。 SVNやCVSの間隔から抜けられない人たちなのだろうなぁ…と思っているのですが、実際どうなのでしょう… 私が間違ってる可能性も十分ある。 ただ「Git はオブジェクト指向と同じだと思ってます。ブランチはメソッド的な考えが良いと思う...

JavaScript addEventListener() のスコープについて

Extjs を使っていると、イベント処理をするために「scope:me」または「scope:this」をよく使うと思います。 これを使うと、イベントの呼び出し先 function のthis が、scope オブジェクトになります。 とても便利ですよね。 で、今回「window.postMessage();」 を使う事になったため、「window.addEventListener('message',fn);」について調べたのですがどのページを見ても、呼び出し先 function の this 変更方法が、小さくしか書かれて無かった。 分かりにくかったのでここに書く。 window.addEventListener('message', this.onclick2.bind(this)); または element.addEventListener('message', this.onclick2.bind(this)); です。 「.bind(this)」 が重要です。 Extjsで書くなら、こんな感じでしょうか。 window.addEventListener("message", me.onWindowMessage.bind(me)); これで、 function : onWindowMessage(event){ this; // window オブジェクトでは無く、上記「me.onWindowMessage.bind(me)」のmeオブジェクトになる } this は、上記の "me" になります。 this は、"window" ではありません。 作業しやすくなりますね。 因みに、「javaScript 1.8.5(ecmascript 5.1)」以上と言う制限がありますが、もう2011年に策定されています。 対応はここを見た方が早いです。 http://kangax.github.io/compat-table/es5/#Function.prototype.bind 主要ブラウザの最近のバージョンなら対応していますよね。 検索用:window.onmessag...