hitode909の日記

趣味はマリンスポーツですの日記です

一回だけ通信したいようなとき

ボタン押したらXHRでなんか取ってきて表示するみたいなとき、resultっていう変数を用意したり、XHRオブジェクトを取って置いたりしてたけど、underscore.jsとかのmemoize使えばきれいに書ける気がした。

get = _.memoize ->
  $.get 'a.txt'

$button.on 'click', ->
  get().done (res) ->
    alert res

これで通信一度だけになればスッキリする。気になる点としては、引数なければmemoizeできないかもしれない。この記事iPhoneで書いてて上のコードは動かしてない。動かなかったらなんか自分で書けばいい。とにかく、自分でXHRのオブジェクト取っておくんじゃなくて、wrapした一般的な関数が持っておいてくれるとかわいいということを言いたかった。ロジック本体と、そのキャッシュの仕組みが分離されると良い。XHRに限らず、Deferredを取っておくとか、リポジトリみたいなのを作りたいときとか、そういうときに使えるはず。なんかいいこと思いついた気がしたけど普通にmemoizeの話みたいになった。