mx:ListとdataProvider

LINEで送る
Pocket

Listコンポーネントにデータベースから取得したデータを利用して、Listコンポーネントと連携させようとしたのだが、うまく行かなかった。

構造が問題だったらしい。
もしかしたら変更できるのかも知れないが、ちゃんと連携させるには、こういうことでしょう。

前提:
データ:var ary_c:ArrayCollection とする。

構造:
ary_c[var a:int].prop:Object
の様に、
ary_c[取得した件数分のインデックス].DBのカラム名
とする。なので、
ary_c[取得した件数分のインデックス]はObject型ということです。

自作したクラスでは、下のように、label , data という取得の仕方ではないので、下記のように変換。

Listコンポーネント:
表示させるデータ:ary_c[var a].label
実際に持たせるデータ:ary_c[var a].data

この様にすると、Listコンポーネントに必要なデータを取得し、表示、データを保持させることができました。

2007年7月10日04:32

カスタムクラスのカスタムイベント

LINEで送る
Pocket

AIRを使うとローカルでSQLiteを利用できるということで、
PHPのPearに近い感じで自作クラスを作ろうとクラスを作っていたのだが、DBから取得したデータが確かに自分の組んだ配列に格納されたという事を知らせる必要があった。

単にDBからデータを取得した、というだけならSQLEventを使えば良いのだが、今回はその後に処理をする必要がある。
ということは、それを知らせるイベントが必要になるので、カスタムイベントを自作クラスに実装させた。

その方法。

まず、イベント系のクラスをインポート。(下で継承しているからいらないかも)
import flash.events.Event;
import flash.events.EventDispatcher;
import flash.events.IEventDispatcher; //いらないかも知れないです。

クラスにEventを継承。
public class DB extends Event

次に、EventDispatcherのオブジェクトを生成。
var event_dispatcher:EventDispatcher = new EventDispatcher();

さらに、このクラスにイベントを実装させるので、
Event系にある、addEventListener, dispatchEvent, hasEventListener, removeEventListener, willTriggerを実装。

スーパークラスを呼び出す。
super(“customEvent”);

//super()メソッドについて
http://livedocs.adobe.com/flash/9.0_jp/ActionScriptLangRefV3/statements.html

Eventクラスの各メソッドを置き換え(上書き)するので、
overrideをつけます。
public override function clone():Event{
return new DB();
}
public function addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void{
event_dispatcher:EventDispatcher.addEventListener(type , listener, useCapture, priority, useWeakReference);
}
public function dispatchEvent(evt:Event):Boolean{
return event_dispatcher:EventDispatcher.dispatchEvent(evt);
}
public function hasEventListener(type:String):Boolean{
return event_dispatcher:EventDispatcher.hasEventListener(type);
}
public function removeEventListener(type:String, listener:Function,useCapture:Boolean):void{
event_dispatcher:EventDispatcher.removeEventListener(type, listener, useCapture);
}
public function willTrigger(type:String):Boolean{
return event_dispatcher:EventDispatcher.willTrigger(type);
}

ここまではまるまるコピーでもいいんじゃないでしょうか。

以上の設定をしておけば、イベントを配信するときは、

event_dispatcher.dispatchEvent( new Event(“myEvent”) );

とでもしておけば、

var db:DB = new DB();

db.addEventListener(“myEvent”, myEventHandler);

としておけば、

function myEventHandler(e:Event):void{
//処理
}

とでもしておけば利用可能です!!!

2007年7月8日23:34

メモ。(HTML)

LINEで送る
Pocket

簡単なことだったが、気づくのが遅かったのでメモ。

<a href=””></a>のときの挙動なのですが、例として、今開いているURLをhttp://www.example.com/test.phpとする。
どうやら
Safari, Firefox -> http://www.example.com/test.php
だが、IE 6 -> http://www.example.com/
となるみたい。

こまったこまった。。。

2007年7月8日22:56

PaperVision 3Dを使ったいい例

LINEで送る
Pocket

Carlosulloa
http://carlosulloa.com/

Interactive Design , Development & Consulting
と書いている。

この方は何でもやる人なんだろう。

このサンプルですが、
車に画像をマッピングしているのか、具体的なことは全くよくわかりませんが、動きがさくさくしてて気持ちいい。

「もしかして、PaperVision3Dって使い道あるの?」って思わせてくれたサンプルです。

2007年7月7日18:10

SQLiteの続き

LINEで送る
Pocket

つぎはSelectしたデータの取得。

import flash.data.SQLResult;

//結果を取得する
private var sqlResult:SQLResult = new SQLResult();
//結果を格納する配列
private var resultAry:Array = new Array();

で、
sqlResult = sqlStatement.getResult();
resultAry = sqlResult.data;

仮にテーブルにnameというデータがあったとすると、
resultAry[0].id

で取得。
[0]はインデックスなので、3番目のデータが欲しい場合は、[2]などとしましょう。

 

2007年7月4日15:29

AIRでのSQLite

LINEで送る
Pocket

apolloからAIRになり、SQLiteが使えるようになったみたい。

なので早速使ってみた。

基本的に、
接続: flash.data.SQLConnectionクラス
クエリ: flash.data.SQLStatementクラス

で行うみたいだが、SQLiteのファイルを指定するときに、
flash.filesystem.Fileクラスが必要。

さらに、各種イベント系。
flash.events.SQLEvent?

とたくさんあるが、僕はこうしました。

import flash.filesystem.File;
import flash.data.*;
import flash.filesystem.*;
import flash.events.SQLErrorEvent;
import flash.events.SQLEvent;
import flash.events.SQLUpdateEvent;

多い!

大まかに流れを書くと、こんな感じです。

SQLConnectionのオブジェクトを生成。
SQLStatementのオブジェクトを生成。

SQLConnection.open( new File(“DBファイルのURL”)で接続開始。

接続後の処理は
SQLStatement.sqlConnection = SQLConnection
として接続情報を実際に処理を担当するSQLStatementへ渡す。

接続完了のイベント発行後、
SQLConnection.addEventListener(“open”, openHandler); //openHandler=接続後に行いたい処理

実際の処理を行う。
openHandler(e:Event):voidないで
SQLStatement.text = “実際に実行するクエリ”;
SQLStatement.execute(); //ここで実行。

selectなどを利用してて、結果が欲しい時は、クエリ実行後に、結果が
SQLStatement.addEventListener(“result”, resultHandler);
で取得できるので、
resultHandler内で、
SQLStatement.getResult()により結果を取得する。

といった流れです。

実際のスクリプトとしては、こんな感じで記述しました。
//DBの接続担当のオブジェクト作成
private var sqlConn:SQLConnection = new SQLConnection();
//SQLのクエリなど実際の処理担当のオブジェクト作成
private var sqlStatement:SQLStatement = new SQLStatement();

private var pathPrefix:String = “/air”;
//SQLiteはファイルベースのDBなので、その場所を指定。※URL形式!!
private var dbFile:File = new File(pathPrefix + “/data.db”);

if(sqlConn.connected == false){
sqlConn.open( dbFile , true,false,-1);
}

//DB接続がOKの場合に発生するイベント
sqlConn.addEventListener(“open”, sqlOpenHandler);
//エラーの時に発生するイベント
sqlConn.addEventListener(“error”, sqlErrorHandler);

//DBとの接続をSQLStatement(処理担当)へ渡す。
sqlStatement.sqlConnection = sqlConn;

//接続が無事完了してからの処理
private function sqlOpenHandler(e:SQLEvent):void{

var query:String = “”; //select , insert , create table , deleteなどのクエリ

//クエリをSQLStatementオブジェクトへ入れる。
sqlStatement.text = query;

//クエリの実行。
sqlStatement.execute();

//実行結果を取得したい場合は、イベント”result”を取得する。
sqlStatement.addEventListener(“result” , resultHandler);
}

//クエリ実行結果の取得
private function resultHandler(e:Event):void{
sqlStatement.getResult();

}

これで結果を取得できます。

備考:
これは僕がおためし程度に書いたスクリプトですので、間違いなどあればご指摘いただければと思います。

後、具体的なコードも細かい部分で省略してるところはあります。

2007年7月4日01:36

Basic認証

LINEで送る
Pocket

現在ローカル開発用の環境を用意してるのですが、そこが複数名で利用しているLANにあるので、Basic認証をつける。

ここでちょっと引っかかった。

.htaccessを作り、
AuthType Basic
AuthUserFile /var/.htpasswd
AuthGroupFile /dev/null
AuthName

2007年7月3日03:25

URLVariablesではまった

LINEで送る
Pocket

AS3でのURLVariable関連でつまづいたのでメモ。

AS3でサーバーと通信する時は、
送信するオブジェクト= URLLoader();
送信先URLや送信方法などの設定=URLRequest();
送信するデータ=URLVariables();

を使います。よね??

今回は、送信だけのことを書きます。

で、URLVariablesに次々と送信したいデータをつめこむ。
// 送信したいデータのセットアップ
var urlvariables:URLVariables = new URLVariables();

urlvariables.data1 = variable1;
urlvariables.data2 = variable2;
.
.
.

//送信先URL、送信
var urlrequest:URLRequest = new URLRequest();
urlrequest.url =

 

2007年7月2日22:06

Mac OS X でのJava

LINEで送る
Pocket

2007年6月27日21:56より

ActionScript3.0が大変Javaに似ている、そういう話しを聞いていたので、ちょっとだけjavaを触ってみることにしました。

で、MacではどこにJavaのファイルあるの?と思っていると、こんな記事。

http://developer.apple.com/jp/qa/qa2001/qa1170.html

『Mac OS X ではこれに相当するものは、常に /Library/Java/Home 』

メモですよ。