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イベントが発火したら, それを呼ぶとか

jasmine 便利

RSpec っぽく(RSpec軽く見た程度で書いたことない) 書けて気持ちよさげ.
1.1.0 落としたら (standalone版) libしかなくて 1.0.2 落としてきて, こっちの lib と 1.1.0 交換してパスやら変更した.

考えがまとまらないところ

1, DOM操作
View が キモイことになるので, Dom操作ゴリゴリするのはUIコンポーネントにまかせようかとやってるが, どこまで任せるかに迷う.

$.valとかで値とってきたりするのはどこの責務にするかとかも...
そもそもそこを責務として分けることが適切かどうかとか (必要になったところでやるとかのがいいのか)

Domモデルみたいなの作ろうかとか, で UIコンポーネント は複雑なUI作るときに使うとか 考えたりしては うーんとなったり

2, Event 貼るのは Controller でいいのかなーとか.
View で貼って Controller のメソッド呼ぶのが正しい気がしてきたり.

JavaScript 難しいな

というより Webフロントエンド のアーキテクチャもしくはそれ以前の考え方が足りてなさすぎるということかな
さっき挙げたのを解決したとしても, リッチな Webアプリを作るのに