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

2015年7月25日土曜日

react.jsとjquery mobile

reactjsで書いたコンポーネントをjquery mobile風にしたくて試してみた。

まず単純に、react.jsのコードにjquery mobileのコードを書いてみた。
render()メソッドの中に書く。

<body>
<script type="text/jsx">
React.render(
        <ul data-role="listview">
          <li><a href="acura.html">Acura1</a></li>
          <li><a href="audi.html">Audi1</a></li>
          <li><a href="bmw.html">BMW1</a></li>
        </ul>
);
</script>
</body>

すると何も表示されない。

次に、htmlのbodyタグ直下に書いて見る。
<body>
    <div id="content"></div>
        <ul data-role="listview">
         <li><a href="acura.html">Acura</a></li>
         <li><a href="audi.html">Audi</a></li>
         <li><a href="bmw.html">BMW</a></li>
        </ul>
    </div>
<script>省略</script>
</body>
これはきちんと表示される。

react.jsもjquery mobileもタグのattributeを元に、domの操作をしているから、この辺の処理がバッティングしているのかもしれない。

調べてみたところ、jquery mobileが変換するclassを直に指定すれば出来るとの情報がstackoverflowにあった。なるほど。


やってみる。

<body>
<script type="text/jsx">
React.render(
   <ul class="ui-listview" data-role="listview" >
        <li class="ui-first-child"><a href="acura.html">Acura3</a></li>
        <li><a href="audi.html">Audi</a></li>
        <li class="ui-last-child"><a href="bmw.html">BMW</a></li>
   </ul>
);
</script>
</body>

ブラウザで再度確認する。今度は表示された。しかし、jquery mobileのスタイルではなく、ただのul要素として描画されている。つまり、class以下は無視されたようだ。

試しにstackoverflowで例として出されていたbuttonを表示してみる。

<body>
<script type="text/jsx">
React.render(
 <button className="ui-btn"/>
);
</script>
</body>

こちらはきちんとjquery mobile風で表示された。

出来るのと出来ないのがあるようだ。
listviewの場合は、それを含む外のdomもclass指定すれば出来たりするのだろうか。

ただ、いずれにせよいちいちclassを調べなければいけないのはだるすぎる。
あまりこの組み合わせは推奨出来るようなものではなさそうだ。



2013年10月15日火曜日

App Ranking HIstoryにチャート機能を実装した

AppleのRSSからiPhoneアプリのランキングを取得するApp Ranking Historyにチャートを導入してみました。

気になるアプリのランキング推移をチャートで確認できます。



google chart apiを使って作りました。
定番のchartはひと通り揃ってていい感じです。

一応スマフォでも見れるようには作りましたが、レイアウトとか見栄えが若干いまいち。

iPhoneのサファリで株価とかgoogle検索すると綺麗に表示されるんだけど、これはどうやってるんだろうか。これもgoogle chart apiつかってるのだろうか。




ところで、このサービス、暇な時にちょこちょこいじってましたが、ここまで来ると次はアプリ名で検索とかしたくなりますね。まあそれは気が向いた時にでもやってみます。

2013年8月4日日曜日

iOSアプリトラッカー アップデートしました

前にブログで紹介したiTunesストアで1位をとったアプリを時系列で表示させるiOSアプリトラッカーをちょっとだけ機能拡張しました。

今回の修正では1位だけじゃなくて2位以降も表示出来るようにしました。






日付のところをクリックすると、今まではiTunesストアのアプリページに飛んでいたのですが、今回からは次のような画面に遷移して2位以降のアプリも見ることができます。

2013年5月5日日曜日

ランキング1位のiPhoneアプリの履歴を表示するサービス作ってみた

定期的に新しいアプリが話題に上がってくるiPhoneアプリ。
毎日App Storeを眺めてても面白いんですが、忙しくなるとしばらく見ないこともしばしば。

なので、ランキング1位のアプリを毎日記録して一覧表示するサービスを作ってみました。


iPhoneアプリだけでなく、iPadアプリも見ることができます。
それにしてもパズドラすごいですね。さすが1300万ダウンロード。

元になるデータはapple公式のiTunes Store RSS
これをgoogle apps engine上でかいたpythonで一日一回cronで取得しています。

今回のアプリでは日本のメディアタイプがiTune Appsのデータを取得していますが、プルダウンの選択を変えればmusicとかも取得出来ます。




2012年10月12日金曜日

jquery mobileのreadyとpageinitイベント〜その1

jquery mobileのページ初期化イベントを発行するpageinit。これは単にjqueryのreadyに相当するのかと思っていたのですが、どうやらそうではない様子。

jquery mobileの公式ページによるとreadyとpageinitについてこんな記述があります。


Important: Use $(document).bind('pageinit'), not $(document).ready()The first thing you learn in jQuery is to call code inside the $(document).ready()function so everything will execute as soon as the DOM is loaded. However, in jQuery Mobile, Ajax is used to load the contents of each page into the DOM as you navigate, and the DOM ready handler only executes for the first page. To execute code whenever a new page is loaded and created, you can bind to the pageinit event. This event is explained in detail at the bottom of this page.


なので、安直にjqueryで$(document).ready()としていたところを$(document).bind('pageinit')とすればいいのかと思ってましたが、やってみるとそれではうまくいきません。たとえばclickイベントをbindする処理。

pageinitイベントは<div data-role='page'>で指定したページが初期化されるときに呼ばれるので、$(document).bind('pageinit')にしてしまうと、初めてページ遷移するときに必ず呼ばれてしまいます。

例えば次のようにページを2つ遷移させたあとにあるlabelにclickイベントをbindする処理では、labelを開くまでに3回bindが実行されてしまうので、labelをclickした時に3回分だけalertが実行されることになります。

 <script type="text/javascript">

$(document).bind('pageinit',function() {

     $('label').live("click",
             function(){
                  alert("clicked!");
             }
     );
});
</script>
</head> 
<body>
  <div data-role="page" data-theme="b" id="page1">
     <div data-role="content" id="page_word_list_content">
      <a href="#page2">to page2<a> 
    </div>
  </div>
  <div data-role="page" data-theme="b" id="page2">
    <div data-role="content" id="page_word_list_content">
      <a href="#page3">to page3</a>
    </div>
  </div>
  <div data-role="page" data-theme="b" id="page3">
    <div data-role="content" id="page_word_list_content">
      <label>click me!
    </div>
   </div>
</body>




なので、pageinitイベントはあくまでもdata-role="page"の初期化相当に限り、イベントハンドラの登録処理などは相変わらず$(document).readyを利用して記述するのがよさそうです。

まあ考えてみれば当たり前なんですが、公式のドキュメントで


Important: Use $(document).bind('pageinit'), not $(document).ready()

なんて言われちゃうとreadyイベント自体を使っちゃいけないのかな、なんて気になっちゃいますよね。