SlideShare uma empresa Scribd logo
1 de 29
Baixar para ler offline
ExtJS入門
Ext.Direct
  2012/11/22
アジェンダ



● 案件紹介
● ExtJS(Ext.Direct)
● 作ってみる

  ● one more thing.
こんな案件あるよね

ある日

「簡単なテーブルでCRUDアプリ作って。
 これ画面イメージね。」
「期間?1週間くらいでチャチャッと作って。」

「( ゚д゚)ポカーン」

よくある(らしい)おはなし。
画面イメージ




(注)案件の実物とは異なります。
こんな案件あるよね

簡単なアプリといっても・・・
● 詰めてみると意外にやること多い。
● 要望とか増えるんじゃない?

設計とか拡張性を考えたら得意なフレームワークがあ
るといいよね。
ということで、ExtJSを使ってみた。
ExtJS
ってなに?

JavaScriptベースでの
クライアントMVCフレームワーク
(開発:Sencha http://www.sencha.com/)

● きれいなUI ⇒ bootstrap, jQueryUI, etc
● MVC ⇒ Backbone.js, AngularJS, etc
その両方が備わってる。
ウリはたくさん


● Sencha Touch     - スマフォ向けRIAアプリ対応
● Sencha Architect - ビジュアルエディタ
● Sencha Cmd       - ビルドコマンド
  and more...

今回はこのへん触れません。m(_ _)m


イチ押し ⇒ Ext.DirectとMVCアーキテクチャ
Ext.Direct
JavaScriptから擬似的にサーバクラス・メソッドを叩
く感じ(Remote Procedure Call)

readystatusが何番だったら復帰して・・・とかのい
つものAjaxコードが不要に。

やってることがわかりやすくなって、
可読性があがる。
たとえば
こんな構成(LAMP)で




               サーバ
  ブラウザ         (Apache)
  (ExtJS)                 RDB
               + PHP      (MySQL)
サーバ?
ServerClass.php
<?php
 class ServerClass {
   public function getFormData() {
     return array(
        'success' => true,
        'data' => array('name' => 'Aoyama')
     );
   }
 }
?>
クライアント?
client.js
<script type "text/html">
 ServerClass.getFormData(function(ret) {
    console.log(ret.data.formData); // name => Aoyama
 });
</script>
もちろん

使うための準備、お作法があるので・・・

次からのサンプルでご紹介。

今回のサーバ側サンプルはPHP。
他の言語でも結構行けるらしい。
PerlとかJavaとか.Netとか。

https://market.sencha.com/extensions
MVCは?

冒頭のCRUDアプリを目標にサンプルで確認。


1.   サーバでDBのアクセス用クラスを準備。
2.   アプリのエントリポイントを作る。
3.   モデルを準備。
4.   ビューを準備。
5.   コントローラで整理。
その1
DBアクセスクラス準備


その前に、Ext Direct Packを配置。
http://www.sencha.com/products/extjs/download/

php/classess下にサーバクラスを実装します。
(このあたりはRooterの実装に依存)
その1
DBアクセスクラス準備
CRUDを想定して、
Members::getAll, add, update, remove を実装。
コメントの@remotableがPHP版Direct用メソッドの印。
(スタブなら固定配列を返すだけでもOK)


   class Members {
        /**
          * @remotable
          */
        public function getAll() {
             return {DB取得の結果}
        }
   }
その2
アプリのエントリポイント
ベースとなるHTMLはExtJSとサーバメソッド情報(api.php)、エント
リポイント用JS(myapp.js)を読み込む。

myapp.js

  Ext.onReady(function() {
      Ext.tip.QuickTipManager.init();
      Ext.direct.Manager.addProvider(Ext.app.REMOTING_API);
  });
  Ext.application({
    アプリの各種設定(名前とか)
  });
その3
モデル準備

model/Member.js (テーブルに利用するデータ定義)

 Ext.define('MyApp.model.Member', {
     extend    : 'Ext.data.Model',
     fields  :[
        {name: 'section' , type: 'string'},
        {name: 'name'      , type: 'string'},
        {name: 'offence' , type: 'int'},
        {name: 'defence' , type: 'int'},
        {name: 'speed'    , type: 'int'},
        {name: 'condition' , type: 'string'},
        {name: 'birth'   , type: 'timestamp'},
        {name: 'weapon' , type: 'string'}
     ]
 });
その3
データストア準備
store/Members.js (ストア=テーブルデータのコントローラ)
  Ext.define('MyApp.store.Members', {
    extend : 'Ext.data.Store',
    model : 'MyApp.model.Member',
    proxy : {
       type : 'direct',
       api : {
          create : Members.add, // 1のサーバメソッドを指定
          read : Members.getAll,
          ...
       },
       reader : {
          type : 'json'
           ...
       }
その4
ビュー準備

view配下に以下を準備。
 Viewport.js   // 画面の下地、3ペインを定義
 Header.js
 MemberList.js // センターに配置
 Footer.js

とりあえず3ペインで準備。
MemberList.jsがモデルに紐付くビューに。
その5
コントローラで整理


controller/Members.jsを配置、
動作(create, update, delete)を記述。

・データ読み込み(read)はストアのautoLoadにお任せ
・updateをeditorプラグインにお任せ
できあがり




Ajaxを意識せずにCRUD操作完了。
one more thing
チャートとか付けたくないですか?
簡単にビューを追加。データ連携できるのが強み。
 - 「レゴのようだ」(某氏)



ExtJSではチャートUI (Chartクラス)が準備されてるいるので拡張
して追加。
Ext.chart.Chart:ベクターデータ(SVG)を使ったグラフUI

Raphaëlがベース(Sencha内に組込み)
http://raphaeljs.com/
さらに one more thing
Ext.Directがわかりにくい
サーバメソッドを呼び出す動きが見たい。
というわけで、Footer部に簡単なサーバクラス呼び出し用のボタ
ンを追加。(ほんとはビューでコントロールしちゃダメ(^_^;))
 view/Footer.js --> view/EchoBox.js

   }, {
      xtype : 'button',
      text : 'Server Info',
      handler : function(btn) {
         EchoClass.who(function(text) {
             alert(text);
         });
      }
   }]
サーバ側の準備
サーバにEchoClassを追加。
api.php にEchoClassを登録。
                         EchoClass.php

                         class EchoClass {
  // api.php 抜粋               /**
  $api->add(                    * @remotable
     array(                     */
        'EchoClass',          public function who() {
        'Members'                  return "I am server";
     )                        }
  );                     }
o... one more thing (^_^;)
Proxyモデル
● ExtJS(Sencha)はデータのProxyモデルが整備されている。
● テーブルのような配列型データ構造は以下の構成をとる。



                                    Memory?
                          Proxy
                                    File?
Table                               Server?
View              Store
        データ
        バインディング           Reader/
                          Writer




⇒ LocalStrage使ってみると、クライアントのみのアプリに切り替わる
最後に



楽しくUI作ってみませんか。

まるでレゴのように・・・(^^♪


サンプルソースはこちら。https://github.
com/MtBlue81/DirectSample
ユーザグループ

9月に日本でのユーザグループが発足しました。


Japan Sencha User Group
http://www.meetup.com/Japan-Sencha-User-Group/
書籍も

Sencha Ext JS 4実践開発ガイド
http://amzn.to/Rc0DSp
書籍も

Sencha Ext JS 4実践開発ガイド 2

来年初旬発売予定?

Mais conteúdo relacionado

Mais procurados

traceur-compilerで ECMAScript6を体験
traceur-compilerで ECMAScript6を体験traceur-compilerで ECMAScript6を体験
traceur-compilerで ECMAScript6を体験Toshio Ehara
 
T sql の parse と generator
T sql の parse と generatorT sql の parse と generator
T sql の parse と generatorOda Shinsuke
 
はじめてのVue.js
はじめてのVue.jsはじめてのVue.js
はじめてのVue.jsKei Yagi
 
Kawaz的jQuery入門
Kawaz的jQuery入門Kawaz的jQuery入門
Kawaz的jQuery入門Kohki Miki
 
What's New in MySQL 5.7 Optimizer @MySQL User Conference Tokyo 2015
What's New in MySQL 5.7 Optimizer @MySQL User Conference Tokyo 2015What's New in MySQL 5.7 Optimizer @MySQL User Conference Tokyo 2015
What's New in MySQL 5.7 Optimizer @MySQL User Conference Tokyo 2015Mikiya Okuno
 
MyBatisで流れるようなメソッドチェーン
MyBatisで流れるようなメソッドチェーンMyBatisで流れるようなメソッドチェーン
MyBatisで流れるようなメソッドチェーンShinichi Kozake
 
まだDOM操作で消耗してるの?
まだDOM操作で消耗してるの?まだDOM操作で消耗してるの?
まだDOM操作で消耗してるの?IRI MO
 
CodeIgniterのページングに関して。
CodeIgniterのページングに関して。CodeIgniterのページングに関して。
CodeIgniterのページングに関して。Takatsugu Ishikawa
 

Mais procurados (10)

traceur-compilerで ECMAScript6を体験
traceur-compilerで ECMAScript6を体験traceur-compilerで ECMAScript6を体験
traceur-compilerで ECMAScript6を体験
 
Cubby 2006-08-23
Cubby 2006-08-23Cubby 2006-08-23
Cubby 2006-08-23
 
T sql の parse と generator
T sql の parse と generatorT sql の parse と generator
T sql の parse と generator
 
はじめてのVue.js
はじめてのVue.jsはじめてのVue.js
はじめてのVue.js
 
Kawaz的jQuery入門
Kawaz的jQuery入門Kawaz的jQuery入門
Kawaz的jQuery入門
 
What's New in MySQL 5.7 Optimizer @MySQL User Conference Tokyo 2015
What's New in MySQL 5.7 Optimizer @MySQL User Conference Tokyo 2015What's New in MySQL 5.7 Optimizer @MySQL User Conference Tokyo 2015
What's New in MySQL 5.7 Optimizer @MySQL User Conference Tokyo 2015
 
MyBatisで流れるようなメソッドチェーン
MyBatisで流れるようなメソッドチェーンMyBatisで流れるようなメソッドチェーン
MyBatisで流れるようなメソッドチェーン
 
まだDOM操作で消耗してるの?
まだDOM操作で消耗してるの?まだDOM操作で消耗してるの?
まだDOM操作で消耗してるの?
 
AngularJS入門
AngularJS入門AngularJS入門
AngularJS入門
 
CodeIgniterのページングに関して。
CodeIgniterのページングに関して。CodeIgniterのページングに関して。
CodeIgniterのページングに関して。
 

Semelhante a Ext.direct

13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejsTakayoshi Tanaka
 
データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回Naoyuki Yamada
 
初めての Data api cms どうでしょう - 大阪夏の陣
初めての Data api   cms どうでしょう - 大阪夏の陣初めての Data api   cms どうでしょう - 大阪夏の陣
初めての Data api cms どうでしょう - 大阪夏の陣Yuji Takayama
 
エンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJSエンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJSAyumi Goto
 
初めての Data API CMS どうでしょう - 仙台編 -
初めての Data API   CMS どうでしょう - 仙台編 -初めての Data API   CMS どうでしょう - 仙台編 -
初めての Data API CMS どうでしょう - 仙台編 -Yuji Takayama
 
大阪Node学園八時限目 「expressで作るWebアプリ」
大阪Node学園八時限目 「expressで作るWebアプリ」大阪Node学園八時限目 「expressで作るWebアプリ」
大阪Node学園八時限目 「expressで作るWebアプリ」Shunsuke Watanabe
 
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみたYuki Takei
 
初めての Data api
初めての Data api初めての Data api
初めての Data apiYuji Takayama
 
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話Akira Inoue
 
Data apiで実現 進化するwebの世界
Data apiで実現 進化するwebの世界Data apiで実現 進化するwebの世界
Data apiで実現 進化するwebの世界Yuji Takayama
 
Djangoフレームワークの紹介
Djangoフレームワークの紹介Djangoフレームワークの紹介
Djangoフレームワークの紹介Shinya Okano
 
WTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniterWTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniterMasanori Oobayashi
 
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例Yoshifumi Kawai
 
20091030cakephphandson 01
20091030cakephphandson 0120091030cakephphandson 01
20091030cakephphandson 01Yusuke Ando
 
Parse.comと始めるBackbone.js入門(jscafe7)
Parse.comと始めるBackbone.js入門(jscafe7)Parse.comと始めるBackbone.js入門(jscafe7)
Parse.comと始めるBackbone.js入門(jscafe7)Ryuma Tsukano
 
Spring Frameworkの今 (2013年版) #jjug_ccc #ccc_r17 #springframework
Spring Frameworkの今 (2013年版) #jjug_ccc #ccc_r17 #springframeworkSpring Frameworkの今 (2013年版) #jjug_ccc #ccc_r17 #springframework
Spring Frameworkの今 (2013年版) #jjug_ccc #ccc_r17 #springframeworkToshiaki Maki
 
node+socket.io+enchant.jsでチャットゲーを作る
node+socket.io+enchant.jsでチャットゲーを作るnode+socket.io+enchant.jsでチャットゲーを作る
node+socket.io+enchant.jsでチャットゲーを作るKiyoshi SATOH
 

Semelhante a Ext.direct (20)

13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs
 
Vue.js で XSS
Vue.js で XSSVue.js で XSS
Vue.js で XSS
 
データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回
 
初めての Data api cms どうでしょう - 大阪夏の陣
初めての Data api   cms どうでしょう - 大阪夏の陣初めての Data api   cms どうでしょう - 大阪夏の陣
初めての Data api cms どうでしょう - 大阪夏の陣
 
エンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJSエンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJS
 
初めての Data API CMS どうでしょう - 仙台編 -
初めての Data API   CMS どうでしょう - 仙台編 -初めての Data API   CMS どうでしょう - 仙台編 -
初めての Data API CMS どうでしょう - 仙台編 -
 
大阪Node学園八時限目 「expressで作るWebアプリ」
大阪Node学園八時限目 「expressで作るWebアプリ」大阪Node学園八時限目 「expressで作るWebアプリ」
大阪Node学園八時限目 「expressで作るWebアプリ」
 
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた
 
Windows Azure PHP Tips
Windows Azure PHP Tips Windows Azure PHP Tips
Windows Azure PHP Tips
 
ScalaMatsuri 2016
ScalaMatsuri 2016ScalaMatsuri 2016
ScalaMatsuri 2016
 
初めての Data api
初めての Data api初めての Data api
初めての Data api
 
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
 
Data apiで実現 進化するwebの世界
Data apiで実現 進化するwebの世界Data apiで実現 進化するwebの世界
Data apiで実現 進化するwebの世界
 
Djangoフレームワークの紹介
Djangoフレームワークの紹介Djangoフレームワークの紹介
Djangoフレームワークの紹介
 
WTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniterWTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniter
 
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
 
20091030cakephphandson 01
20091030cakephphandson 0120091030cakephphandson 01
20091030cakephphandson 01
 
Parse.comと始めるBackbone.js入門(jscafe7)
Parse.comと始めるBackbone.js入門(jscafe7)Parse.comと始めるBackbone.js入門(jscafe7)
Parse.comと始めるBackbone.js入門(jscafe7)
 
Spring Frameworkの今 (2013年版) #jjug_ccc #ccc_r17 #springframework
Spring Frameworkの今 (2013年版) #jjug_ccc #ccc_r17 #springframeworkSpring Frameworkの今 (2013年版) #jjug_ccc #ccc_r17 #springframework
Spring Frameworkの今 (2013年版) #jjug_ccc #ccc_r17 #springframework
 
node+socket.io+enchant.jsでチャットゲーを作る
node+socket.io+enchant.jsでチャットゲーを作るnode+socket.io+enchant.jsでチャットゲーを作る
node+socket.io+enchant.jsでチャットゲーを作る
 

Ext.direct