- 到 http://www.adobe.com/go/flex3_cs3_swfkit 下載 Flex Component Kit for Flash CS3 (也可以一併下載 Flex Skin Design Extensions)
- 使用 Extension Manager 安裝如這篇說明 Installing the Flex Component Kit for Flash CS3
- nick velloff 的製作範例在 Flex Component Kit Examples, MAX 2007 Chicago Presentation
2008-03-22
使用 Flash CS3 製作 Flex 的組件
2008-03-10
在 CodeIgniter 裡建立 SabreAMF 的 gateway
承上一篇 結合 CodeIgniter 和 SabreAMF
接著是建立 gateway, 請參考 Using Flex 2 RemoteObject and SabreAMF 和 Getting started with SabreAMF 的作法。
我們會將 gateway 放在 Controllers 裡。Server side remoting 程式則是放在 Models 裡。
在 ci_project/system/application/controllers/ 新增檔案 gateway.php
測試的 Models 放在 ci_project/system/application/models/test/test_model.php
Flash CS3 AS3 的 client 測試
Flex 的 client 測試
接著是建立 gateway, 請參考 Using Flex 2 RemoteObject and SabreAMF 和 Getting started with SabreAMF 的作法。
我們會將 gateway 放在 Controllers 裡。Server side remoting 程式則是放在 Models 裡。
在 ci_project/system/application/controllers/ 新增檔案 gateway.php
<?php
class Gateway extends Controller {
function Gateway()
{
parent::Controller();
}
function index()
{
require_once('SabreAMF/CallbackServer.php');
try {
$callbackServer = new SabreAMF_CallbackServer();
$callbackServer->onInvokeService = array($this, 'invokeService');
$callbackServer->exec();
}catch(Exception $e){
echo $e->getMessage();
}
}
function invokeService($service, $method, $data) {
$modelPath = str_replace( '.', '/', $service);
$this->load->model($modelPath, 'amf_model');
return call_user_func_array( array( $this->amf_model, $method ), $data );
}
}
?>
測試的 Models 放在 ci_project/system/application/models/test/test_model.php
<?php
class Test_model extends Model
{
function Test_model()
{
parent::Model();
}
function myMethod($d1, $d2)
{
$ret = array(
array( 'ID' => $d1, 'name' => 'okok', 'phone' => $d2 ),
array( 'ID' => '35712', 'name' => 'Esbd V. Mb', 'phone' => '235-4263' ),
array( 'ID' => '46823', 'name' => 'Ftce W. Nc', 'phone' => '346-5374' ),
);
return $ret;
}
}
?>
Flash CS3 AS3 的 client 測試
import fl.data.DataProvider;
var nc:NetConnection = new NetConnection();
//nc.objectEncoding = ObjectEncoding.AMF3;
var onResult:Function = function(result:Object) {
QopDump.echo(result);
dg.dataProvider = new DataProvider(result);
};
var onStatus:Function = function(info:Object) {
QopDump.echo(info);
};
var responder:Responder = new Responder(onResult, onStatus);
nc.connect("http://localhost/ci/?/gateway");
nc.call("test.Test_model.myMethod", responder, ["888", "666"]);
Flex 的 client 測試
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:RemoteObject id="ro"
destination=" "
endpoint="http://localhost/ci/?/gateway"
source="test.Test_model"
result="resultHandler( event )"
fault="faultHandler( event )">
</mx:RemoteObject>
<mx:Script>
<![CDATA[
import mx.rpc.events.*;
import mx.controls.Alert;
import mx.rpc.*;
private function load():void {
ro.myMethod('first','123-456789');
}
private function resultHandler( event:ResultEvent ):void {
Alert.show( QopDump.go(event.result) );
dg.dataProvider = event.result;
}
private function faultHandler( event:FaultEvent ):void {
Alert.show( event.toString() );
}
]]>
</mx:Script>
<mx:Button click="load()" label="Load" />
<mx:DataGrid id="dg" />
</mx:Application>
結合 CodeIgniter 和 SabreAMF
參考這篇 將 Zend Framework 放進 CodeIgniter
將符合 PEAR 規定的 library 掛上 CodeIgniter
1. 設定 config
修改 ci_project/system/application/config/config.php
2. 增加 hooks 設定
於 ci_project/system/application/config/hooks.php 增加
3. 增加 hooks 程式
於 ci_project/system/application/hooks/ 裡增加 pearroot.php
4. 放置 SabreAMF 目錄
建立 ci_project/system/pearroot/ 目錄並將 SabreAMF/ 放置其底下, 就完成初步的設定。
下一篇 在 CodeIgniter 裡建立 SabreAMF 的 gateway
將符合 PEAR 規定的 library 掛上 CodeIgniter
1. 設定 config
修改 ci_project/system/application/config/config.php
$config['enable_hooks'] = TRUE;
2. 增加 hooks 設定
於 ci_project/system/application/config/hooks.php 增加
$hook['pre_controller'][] = array(
'class' => 'Pearroot',
'function' => 'index',
'filename' => 'pearroot.php',
'filepath' => 'hooks',
);
3. 增加 hooks 程式
於 ci_project/system/application/hooks/ 裡增加 pearroot.php
<?php
if (!defined('BASEPATH')) exit('No direct script access allowed');
class Pearroot
{
function index()
{
set_include_path(get_include_path() . PATH_SEPARATOR . BASEPATH . 'pearroot/');
}
}
?>
4. 放置 SabreAMF 目錄
建立 ci_project/system/pearroot/ 目錄並將 SabreAMF/ 放置其底下, 就完成初步的設定。
下一篇 在 CodeIgniter 裡建立 SabreAMF 的 gateway
2008-02-24
2008-01-27
JavaScript 動態產生 radio 選項
例子
如果沒有表單成員, 不可以直接使用 document.form1.radiog.value 去判斷, 否則會發生語法錯誤, 而應先以 document.form1.radiog 判斷。
多個 radio button 會變成陣列, 判斷方式和單一個不同。
另外, 上面的例子在 Firefox 2.0.0.11 會發生錯誤, 如果先在「單一選項」或「多個選項」選第一個項目再回到「沒有選項」並按「檢查」, 就可以看到問題 =.=
如果沒有表單成員, 不可以直接使用 document.form1.radiog.value 去判斷, 否則會發生語法錯誤, 而應先以 document.form1.radiog 判斷。
多個 radio button 會變成陣列, 判斷方式和單一個不同。
另外, 上面的例子在 Firefox 2.0.0.11 會發生錯誤, 如果先在「單一選項」或「多個選項」選第一個項目再回到「沒有選項」並按「檢查」, 就可以看到問題 =.=
2008-01-26
2008-01-24
AS3 翻頁效果 (使用現成類別)
PageFlip class
作者首頁
測試範例
測試範例原始檔
作者首頁
測試範例
import com.foxaweb.pageflip.PageFlip;
const PAGE_WIDTH = 240;
const PAGE_HEIGHT = 180;
var render:Shape=new Shape();
var page0:BitmapData=new p0(PAGE_WIDTH, PAGE_HEIGHT);
var page1:BitmapData=new p1(PAGE_WIDTH, PAGE_HEIGHT);
render.x=250;
render.y=35;
addChild(render);
this.addEventListener(Event.ENTER_FRAME, onEF);
function onEF(e:Event){
render.graphics.clear();
// 計算翻頁的物件
var o0:Object = PageFlip.computeFlip(
new Point(render.mouseX, render.mouseY), // 翻折位置
new Point(1,1), // 右下角
PAGE_WIDTH, PAGE_HEIGHT, // 尺寸
true, // 水平翻頁
1);
PageFlip.drawBitmapSheet(o0, render, page0, page1);
}
測試範例原始檔
2008-01-16
JavaScript 傳中文給 PHP
用 GET 送中文字時, 不同瀏覽器的行為不同
所以先以 JS 轉換成 Unicode
傳給 PHP 後, 再轉成 utf8
資料來源: Neo's Blog 使用 PHP 解譯 javascript escape() 編碼過的字串
所以先以 JS 轉換成 Unicode
傳給 PHP 後, 再轉成 utf8
資料來源: Neo's Blog 使用 PHP 解譯 javascript escape() 編碼過的字串
<?php
$search_value = uniDecode($search_value, 'utf8');
function uniDecode($str,$charcode){
$text = preg_replace_callback("/%u[0-9A-Za-z]{4}/",toUtf8,$str);
return mb_convert_encoding($text, $charcode, 'utf-8');
}
function toUtf8($ar){
foreach($ar as $val){
$val = intval(substr($val,2),16);
if($val < 0x7F){ // 0000-007F
$c .= chr($val);
}elseif($val < 0x800) { // 0080-0800
$c .= chr(0xC0 | ($val / 64));
$c .= chr(0x80 | ($val % 64));
}else{ // 0800-FFFF
$c .= chr(0xE0 | (($val / 64) / 64));
$c .= chr(0x80 | (($val / 64) % 64));
$c .= chr(0x80 | ($val % 64));
}
}
return $c;
}
?>
訂閱:
文章 (Atom)
