あったかくてふとんに転がってるだけで寝っぱなしだよ……。 と思ったら体調が微妙によろしくない。風邪っぽいか。
GWに帰省するのにいつも新幹線というのもなんだよなぁと思っていろいろ調べた結果、高速バスを取ってみた。 休み長いので移動に一日くらい潰れても問題なかろうということで。 けっこう時間かかるけどどんなもんかなぁ。
TRPGオンラインセッション用のツールをRubyとOpalで作ってたやつを再開した。
で、OpalでKnockoutJSを使ってたんだけど大変なことになってきた。 ViewModelを継承しようかと思ってたんだけど適当に作りすぎてたせいで動かなくなってもうた。
Opalのオブジェクトを直接KnockoutJSに渡してるおかげで@hoge
といったインスタンス変数にJavaScriptのObservableが入ってて、でもそれはOpal側からは直接いじれないんでめんどくさいことになっててあばばば……っていう状況。
以前の日記を見るとJavaScript側のObservableに直接extendして~とか書いてあるし、それやりゃいいのになぜかそうなってないコードになっててなんでだっけとやってみたら、どうも動かん。OpalのどっかのバージョンでJavaScriptのオブジェクトに直接extendできなくなったのかな?コードを見た感じなんかそんな雰囲気だ。
いくらか悩んだりOpalのコードを眺めたりしたけど、結局Opalの世界とJavaScriptの世界は極力分離すべきってところで落ち着いた。 JavaScript側にOpalのViewModelオブジェクトを直接渡さず、JavaScriptのラッパオブジェクトを作って渡してやるし、JavaScriptのオブジェクトを直接いじらずOpalのラッパオブジェクトを触るようにすると。その境界面でひたすら頑張って相互に変換しあうものを作った。
まあまあ使う分くらいは出来た気がするので、ちょっと使い勝手にまだ疑問が残る点はあるものの、これはJavaScriptから直接呼ばれるからーだの呼ばれないからーだの考えなくて済むようになっただけでも助かる。
あまりにもニッチなことやってるので世界で2~3人くらいしかやってそうもないことやってるとか言われてたんだが、あとで調べたら既に同じことやってる人がすぐ見つかったので、おそらく世界で20~30人くらいは居てもおかしくなさそうである。
ていうかOpal-Knockoutとか既にあったんだ。やってることだいたい同じだし無駄なことしたかなと思ったけど、これだけじゃ欲しい機能足りないので結局いじるはめにはなっただろう。あとJavaScriptのObservableにextendしてんだけどやっぱり動くんだろうかこれ。なんか書き方おかしかったのかな。まあなんにせよ直接JavaScript側のオブジェクトいじるのは良くなさそうなんでいいんだけど。
あー、ちなみにリポジトリは公開できてないので俺が作った分に関してのコードもないです。公開するにしてもめんどいので当面単体で切り出すつもりもないし。
関係ないけど最近Opalのリポジトリ見たらMarshalできるようになったぽくて興味がそそられますな。サーバとクライアント間の通信をJSONにしてたけど、独自クラスのシリアライズは自前でやらないといけなくてめんどくさくてな。まあでもやっぱり自前でのシリアライズは結局作るはめになりそうだなぁという気もする。
そんなことよりせっせと作ってかないとなぁ。