デジモノ狂想曲!

デジタルデバイスの活用方法を模索しています。
IS03、iPhone、モバイルブースターなども揃い、デジタルライフは充実してきています。

.

2009年09月16日

mixiアプリを作ってみようと思うんだ その3〜画面を切り替えてみよう[1/2]〜


こんばんわー。

相変わらずスローペースでいろいろ勉強しています。

今回は、画面の遷移について勉強してみたいと思います。

Check

アプリを作っていくと、画面が一つだけでは足りない場合があります。
そういった場合に、複数の画面を使わないといけないのですが、今回はそのやり方を考えてみます。

今回考えるのは、画面が3つほど有り、それぞれをリンクで行き来する、という感じです。

===初期画面===
☆初期画面だよ!☆
・画面1へのリンク
===============

====画面1=====
☆画面1だよ!☆
・画面2へのリンク
・画面3へのリンク
===============

====画面2=====
☆画面2だよ!☆
・画面1へのリンク
・画面3へのリンク
===============

====画面3=====
☆画面3だよ!☆
・画面1へのリンク
・画面2へのリンク
===============

↑のような簡単な画面を作ってみます。

■情報収集

●コードの記述

mixiのページによると、viewの遷移をするときに、パラメータを指定できるようです。
ということは、どの画面へ遷移するか、という情報をココに記述できそうです。

画面の遷移を起こすための関数は、下記のように書くと良いようです。

var view = gadgets.views.getSupportedViews()["canvas"];
var params = {destination: "VIEW01"};
gadgets.views.requestNavigateTo(view, params);

まずはviewのオブジェクトを生成して、パラメータの"destination"に"VIEW01"(画面1と解釈)を設定、その後遷移させる、という手はずです。

●Javascriptの記述

長いことWEB関連をいじってなかったので、すっかりJavascriptを忘れていました。
やりたいことは・・・

  • 画面XXへのリンク、というものをクリックすると、画面を遷移させたい。
  • 画面を遷移させるには、先ほど書いた関数を実行させることが必要。
  • リンクをクリックしたときに、その関数を実行させたい。

まあ、link文字列をクリックしたときに"OnClick"などというハンドラを実行させることができるみたいなので、それを実行します。
また、ボタンでやった方が若干楽そうですが、かっこわるいのでリンク文字にします。

下記のようにすると、文字をクリックしたときにOnClickイベントが走りそうです。

<a href="javascript:void(0);" onclick="TransitView('VIEW01');">画面1へ遷移</a>

<script language="text/javascript">
function TransitViews(dest) {
  //OnClickイベントハンドラ。
 //ココにコードを記述
}
</script>

■やってみよう

というわけで、必要な情報が整ったので、早速実験してみようと思います。

●実験その1

リンクをクリックしたら、画面に文字が追加されるようにしました。
ここでは、「画面1へ遷移」の文字をクリックしたら、「画面1へのリンクがクリックされた」との
文字列が表示されるようにしました。
20090915001_view.PNG

そのときのコードを掲載します。

<?xml version="1.0" encoding="UTF-8"?>
<Module>
  <ModulePrefs title="TransitView" author_email="koichi_hasegawa@altemasoft.com">
    <Require feature="opensocial-0.8" />
    <Require feature="views" />
      </ModulePrefs>
  <Content type="html" view="canvas"><![CDATA[
テスト<br>
<a href="javascript:void(0);" onclick="TransitView('VIEW01');">画面1へ遷移</a>
<script type="text/javascript" src="http://localhost:8080/transitview/canvas.js"></script>
<script type="text/javascript">
function TransitView(dest) {
 if(dest == 'VIEW01'){
  document.getElementById("bottom_view").innerHTML = '画面1へのリンクがクリックされた';
 } else {
  document.getElementById("bottom_view").innerHTML = 'そのほかのリンクがクリックされた';
 }
}
</script>
<!-- The code for Canvas view is here. -->
<div id="bottom_view"></div>
  ]]></Content>
</Module>

●実験その2

それじゃあ実際に遷移させてみよう!
というわけで、「画面1へのリンク」をクリックしたら、「画面1」がロードされるようにしたいと思います。

・canvasビューの初期画面が下記で
20090915002_view.PNG

・リンクがクリックされると、「画面1へ遷移しています」と表示されるようにします。
20090915003_view.PNG

・遷移が正常に行われたら、「ようこそ画面1へ」という文字が表示されるようにします。
20090915004_view.PNG

このときのコードを記載しておきます。

<?xml version="1.0" encoding="UTF-8"?>
<Module>
  <ModulePrefs title="TransitView" author_email="koichi_hasegawa@altemasoft.com">
 <Require feature="opensocial-0.8" />
 <Require feature="views" />
  </ModulePrefs>
  <Content type="html" view="canvas"><![CDATA[
テスト<br>
<a href="javascript:void(0);" onclick="TransitView('VIEW01');">画面1へ遷移</a>
<script type="text/javascript" src="http://localhost:8080/transitview/canvas.js"></script>
<script type="text/javascript">
var params = gadgets.views.getParams();
var dest_view = params["destination"];

var init = function() {
 if(dest_view == 'VIEW01'){
  //「画面1」用の表示
  document.getElementById("bottom_view").innerHTML = 'ようこそ画面1へ';
 } else {
  document.getElementById("bottom_view").innerHTML = 'ようこそ初期画面へ';
 }
}

//リンクをクリックしたときのイベントハンドラ
function TransitView(dest) {
 if(dest == 'VIEW01'){
  //「画面1」に遷移する
  document.getElementById("bottom_view").innerHTML = '画面1に遷移しています。';
  var view = gadgets.views.getSupportedViews()["canvas"];
  var params = {destination: "VIEW01"};
  gadgets.views.requestNavigateTo(view, params);
 } else {
  document.getElementById("bottom_view").innerHTML = '初期画面に遷移しています。';
  var view = gadgets.views.getSupportedViews()["canvas"];
  var params = {destination: "INIT"};
  gadgets.views.requestNavigateTo(view, params);

 }
}

gadgets.util.registerOnLoadHandler(init);
</script>
<!-- The code for Canvas view is here. -->
<div id="bottom_view"></div>
  ]]></Content>
 
 
<Content type="html" view="home"><![CDATA[
テスト_ここはhome<br>

<!-- The code for Canvas view is here. -->
<div id="bottom_view"></div>
  ]]></Content>
 
</Module>

とりあえず今日はこれで終了です。
残りの3つの画面間の遷移は、また後日書きます。

※念のため、メモ的なもの

ビューの遷移をディバッグしているときに、下記の行を実行したところで"Invalid auth token"なるエラーが発生しました。

  var view = gadgets.views.getSupportedViews()["canvas"];
  var params = {destination: "VIEW01"};
  gadgets.views.requestNavigateTo(view, params);

再起動したらなおったので、なんだったのかよくわかりません。






投稿: はせこう。 at 02:18 | Comment(0) | TrackBack(0) | OpenSocial
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/32159353

この記事へのトラックバック

ランキング投票!

RSS取得