JavaScript というか Webフロントエンド分かってないという話
MVC 的な感じで作っていて, どうもしっくりこない
データ持ったり, サーバーと通信するのはModel
イベント貼るのは Controller
表示まわり変えるのは View
でやっていて, そもそもしっくりきてない気もする
知ってよかったこと
jQuery.Deferredが便利
ajax 使うところは modelでjQuery.Deferred使ってメソッド定義しておいて
function getEvent() { var dfd = $.Deferred(); $.ajax({ type: "GET", url: "/hoge", data: { "hoge": "hoge" }, success: function(data) { dfd.resolve(data) }, error: function(xhr, status, errorThrown){ dfd.reject(xhr, status, errorThrown); } }); return dfd.promise(); }
Controller とかで
searchModel.getEvent().then(function (data) { // 成功 // viewのメソッド呼んで, 取ってきたデータ元にdomいじったり }, function(xhr, status, errorThrown){ // 失敗 });
とかやってる.
ユーザーのアクションと実行するイベントを切り離すということ
独自のカスタムイベントを定義しておいて, clickイベントが発火したら, それを呼ぶとか
考えがまとまらないところ
1, DOM操作
View が キモイことになるので, Dom操作ゴリゴリするのはUIコンポーネントにまかせようかとやってるが, どこまで任せるかに迷う.
$.valとかで値とってきたりするのはどこの責務にするかとかも...
そもそもそこを責務として分けることが適切かどうかとか (必要になったところでやるとかのがいいのか)
Domモデルみたいなの作ろうかとか, で UIコンポーネント は複雑なUI作るときに使うとか 考えたりしては うーんとなったり
2, Event 貼るのは Controller でいいのかなーとか.
View で貼って Controller のメソッド呼ぶのが正しい気がしてきたり.
JavaScript 難しいな
というより Webフロントエンド のアーキテクチャもしくはそれ以前の考え方が足りてなさすぎるということかな
さっき挙げたのを解決したとしても, リッチな Webアプリを作るのに