ラベル CoffeeScript の投稿を表示しています。 すべての投稿を表示
ラベル CoffeeScript の投稿を表示しています。 すべての投稿を表示

2013年3月15日金曜日

スマートフォンなどでJavaScriptのクリックイベントが遅れるのを解消する(AngularJS)

nd-click="hoge($event)"としても、hogeの中で$eventを取得できません。

AngularJS1.1系にngMobileがあります。これが有効になるとスマートフォンでのクリックの遅延がなくなり、スワイプの利用も可能になります。
次期リリース版(1.2系)に含まれると思います。1.0系にバックポートするか1.1系を使うか、1.2系を待つのが良いと思います。
https://github.com/angular/angular.js/tree/master/src/ngMobile


スマートフォンやタブレットではJavaScriptのクリックイベントが少し遅れてくるようになっています。
普段なら自分でtouchstartイベントなどを拾って解決するところだと思いますが、AngularJSはng-clickというAngularJSの機能を使うので、その方法がそのままでは使えなさそうです。AngularJSライク?に解決したのでブログに残します。

タッチイベントが来たらクリックイベントを起こしています。
Gistにも書きました。

CoffeeScriptです。
app = angular.module('AngularStudy', []).directive 'ndClick', => ($scope, $element, $attrs) =>
  isTap = isTapped = false
  $element.bind 'click', => $scope.$apply $attrs['ndClick'] unless isTapped
  $element.bind 'touchstart', => isTap = true
  $element.bind 'touchmove', => isTap = false
  $element.bind 'touchend', => if isTap
    isTapped = true
    $scope.$apply $attrs['ndClick'], $element

一応CoffeeScriptをコンパイルしたJavaScriptも書いておきます。
var app,
  _this = this;

app = angular.module('AngularStudy', []).directive('ndClick', function() {
  return function($scope, $element, $attrs) {
    var isTap, isTapped;
    isTap = isTapped = false;
    $element.bind('click', function() {
      if (!isTapped) {
        return $scope.$apply($attrs['ndClick']);
      }
    });
    $element.bind('touchstart', function() {
      return isTap = true;
    });
    $element.bind('touchmove', function() {
      return isTap = false;
    });
    return $element.bind('touchend', function() {
      if (isTap) {
        isTapped = true;
        return $scope.$apply($attrs['ndClick'], $element);
      }
    });
  };
});

使い方は今までng-clickを書いていたところをnd-clickにするだけです。
<button nd-click="hoge()">ボタン</button>

パソコンとスマートフォンの差を吸収しているので、パソコンでもスマートフォンでもnd-clickだけでカバーできます。

nd-clickはnon delay clickです。

2012年11月2日金曜日

jQueryのajaxが,HTTPステータスコードの何番がsuccessで,何番がerrorなのか調べました

jQueryのajax関数は結果によってsuccessやerrorをcallbackしてくれます.
しかし,400番台や500番台はエラーだろうと予想できますが,300番台など分からなかったので調べてました.
WikipediaのHTTPステータスコードの一覧に乗っているステータスコードを試しました.
http://ja.wikipedia.org/wiki/HTTP%E3%82%B9%E3%83%86%E3%83%BC%E3%82%BF%E3%82%B9%E3%82%B3%E3%83%BC%E3%83%89

これが結果です.
100 is error
101 is error
102 is error
200 is success
201 is success
202 is success
203 is success
204 is success
205 is success
206 is success
207 is success
226 is success
300 is error
301 is error
302 is error
303 is error
304 is success
305 is error
306 is error
307 is error
400 is error
401 is error
402 is error
403 is error
404 is error
405 is error
406 is error
407 is error
408 is error
409 is error
410 is error
411 is error
412 is error
413 is error
414 is error
415 is error
416 is error
417 is error
418 is error
422 is error
423 is error
424 is error
425 is error
500 is error
501 is error
502 is error
503 is error
504 is error
505 is error
506 is error
507 is error
508 is error
509 is error
510 is error

304だけ300番台なのにsuccessでした.

続きは検証に使用したソースコードです.

2012年10月21日日曜日

Vowsで非同期通信のテストを行う方法

VowsはNode.js用のテストフレームワークです. テストもテスト対象もCoffeeScriptで書くことができます. 使ってみたのでその記録を残します.
非同期通信のテスト書くのに時間がかかりました.
環境はUbuntu12.04の64bit版です.