公式なドキュメントはRhomobile社のサイトをご覧ください。
また、この文書は2010/6/16(JST)の情報がもとになっています。
この日本語の翻訳について問題・質問などがある場合、コメントを残してください。それ以外については、本ドキュメント内にある問い合わせ先にお願いします。
The following document (a translation of the English original into Japanese) is published with Rhomobile permission.
If you need official documents, please visit Rhomobile site.
In addition, the following document is based on 2010/June/16 (JST) information.
If you have any question, problem about the Japanese translation, please leave your comment. Except for that, refer contacts in the document.
目次 |
Rhodesのディレクトリとファイル
RhoGenアプリケーションジェネレータは、"rhogen app"のオプションから基本的なアプリケーションを生成します。これは、モデルとアクションを指定すると、サブディレクトリとコントローラとテンプレートファイルを生成します。Rhodesのディレクトリ構成についてのより詳細な情報はrhogenドキュメントを参照してください。
ディレクトリ構造例
例として、/sugarをSugarCRMのへのモバイルアクセスを提供するアプリケーションのルートフォルダとしましょう。アプリケーションのルートディレクトリには、アプリの機能によっていくつかの.erbファイルが含まれます。少なくとも、デフォルトのランディング・ページとしてindex.erbのファイルがあります。このデフォルトのランディング・ページは、通常、いくつかのデータモデルのコントローラへのリンクがありますが、特定のコントローラに関連付けられていません。アプリケーションがコントローラへ関連したデフォルトのランディング・ページが必要な場合は、model/controller/viewフォルダを作って、デフォルトの開始パスとしてこのコントローラのactionを使うことを推奨します。そのためには、framework configuration fileのstart_path propertyを編集します。
生成されたファイル
各モデルの生成されるファイルは、以下で説明するコントローラ、モデルクラスとビュー・テンプレートが含まれます。
コントローラ
Rhodesの生成された各モデルのコントローラには、オブジェクトに対して基本的なCRUD(つまり、create,read,updateとdelete)を実行するいくつかのアクションがあります。これらのアクションは:
- index -オブジェクト一覧表示
- new -新しいオブジェクトを作成するための編集フォームを表示
- create -実際のオブジェクト作成
- edit -既存のオブジェクトを編集
- update -オブジェクトのプロパティを更新
- show -オブジェクトを表示
- delete -オブジェクトを削除
アクションのこのセット(および関連するURLのパス)は、Railsのscaffoldパターンと、オブジェクトのCRUDアクションを生成し、アクションへのルーティングを関連付けられる"map resources"の規約に追従したものです。
モデル
モデルクラスは生成されたモデルのフォルダにあります。モデル"UserBase"は、ファイル"user_base.rb"となります。
モデルにupper_nameメソッドを追加する例は:
class UserBase
#add model specifc code here
def upper_name
self.name.upcase
end
end
View(テンプレート)
上記の.erbファイルはビューに使用されるテンプレートです。Rhodesは、テンプレートの名前付けをRailsの規則に従います。
- index.erbは、データモデルのオブジェクトを一覧表示
- edit.erbは、オブジェクトを編集することができます
- show.erbは、オブジェクトの属性値を示します。
- new.erbは、新しいオブジェクトを作成する
これらのファイルはrhogenジェネレータで生成されます 。テンプレート内で、任意の有効なHTML、JavaScript、およびRubyが使えます。Rubyコードは<%と%で>タグに囲まれます。ERBのさらに詳細な情報はここを参照してください。
AppApplicationクラス
ファイルapplication.rbはAppAplicationクラスを含みます:
class AppApplication < Rho::RhoApplication
def initialize
#put initialization code here
end
def on_activate_app
# Invokes when application activates.
# For iPhone it happens only once, for other platforms,
# each time the app becomes active (from background state)
end
end
現在のセッションデータを格納することができます。AppApplicationオブジェクトのインスタンスを取得するには:
::Rho.get_app
構成
各Rhodesアプリケーションは、"rhoconfig.txt"と呼ばれる設定ファイルが含まれます。典型的なrhoconfig.txtは、アプリケーションが生成されたときには、以下のようになります:
# Startup page for your application
start_path = '/app'
# Path to the options page (in this case handled by javascript)
options_path = '/app/Settings'
# Location of bundle url (i.e. from rhohub.com); used by desktop win32 simulator
rhobundle_zip_url = ''
# Optional password to access bundle (usually not required); used by desktop win32 simulator
rhobundle_zip_pwd = nil
# Rhodes log properties
# log level
# 0-trace, 1-info(app level), 3-warnings, 4-errors
# for production set to 3
MinSeverity = 0
LogToOutput = 1
LogCategories = *
ExcludeLogCategories =
MaxLogFileSize=50 #max log file size in KB, set 0 to unlimited size. When limit is reach, log start from begin of file
# Keep track of the last visited page
KeepTrackOfLastVisitedPage = 0
LastVisitedPage = ''
# Sync server url. Typically this will look like 'http://<hostname>:<port>/application'
# For example: 'http://localhost:9292/application'
syncserver = 'http://localhost:9292/application'
# open rhodes app in full screen mode. default 1 for Android
full_screen = 0
# show status bar on windows mobile. default 1
wm_show_statusbar = 0
# disable screen rotation (enabled by default)
disable_screen_rotation = 0
#disable close app when pressing back on home screen on blackberry
bb_disable_closebyback = 0
#load images in background, this improve reaction speed on user actions, 0 by default
bb_loadimages_async = 0
# Set to 0 to reset the bulksync_state and trigger a bulk sync the next time rhodes synchronizes
bulksync_state = 1
最後の訪問ページ
次回アプリケーションを起動するしたら同じページが開くように、Rhodesは最後の訪問ページの記録を保存することができます。この機能を使用可能にするには
KeepTrackOfLastVisitedPage = 1
注:POST要求は、GETをに変換されることを念頭に置いてください。
アプリケーションデータベースのバージョン
クリーンなデータベースで、次のバージョンのアプリケーションを起動したい場合、rhoconfig.txtでapp_db_versionを設定します。Rhodesアプリが起動すると、現在のdb versionとapp_db_versionを比較し、一致しない場合はクリーンにします。
Ruby API
上記のそれぞれの設定オプションは、RhoConfigのRubyAPIを介して利用できます。:
Rho::RhoConfig.options_path #=> returns '/app/Settings'
Rho::RhoConfig.options_path = '/app/MyObject' #=> assignment will be saved to rhoconfig.txt
注:RubyのAPIを使用してファイルrhoconfig.txt内の任意のオプションを格納することができます。それらはユーザーがアプリケーションの新しいバージョンをインストールしたら失われますので注意してください。
SyncEngine構成
前のセクションで説明したように、"syncserver"オプションが使用できます。このオプションは、期待通りRho::RhoConfig APIで変更することができます。しかし、syncserverのオプションの変更は、実行時にSyncEngineを更新する必要があるので、別のRubyのコードが利用できます:
-
SyncEngine.set_syncserver('http://examplesyncserver.com/apps/MyApp/sources/') #=> nil
上記の関数の呼び出しは、次の操作を行います:
- SyncEngineのメモリ内のsyncserverを更新します(以降行われるすべての同期は、この新しいyncserverを使用します)。
- 古いsyncserverのセッション削除を確実にするため、ログアウトを行います。
- rhoconfig.txtに新しいsyncserverプロパティを書き出します。
自動同期を無効にするには
SyncEngine.set_pollinterval(0)
もしくは、rhoconfig.txtに以下のように設定します:
sync_poll_interval = 0
ロギング
デバイス上のアプリケーションログを表示するには:
SyncEngine.set_pollinterval
同期サーバーにログを送信するには:
SyncEngine.set_pollinterval
永続的ストレージ(BlackBerryのみ)
RhodesでRIMの永続的ストレージAPIの使用を有効にするには、以下の行をrhoconfig.txtに追加するだけです。
use_persistent_storage = 1
(ファイルの代わりに)DBのバージョン、DBジャーナルとDBそのものを格納するために、RIMの永続的ストレージAPIを有効にします。永続的ストレージの主な目標は、アプリケーションをアンインストールした時に、アプリケーションによって格納されるすべてのオブジェクトが、自動的に削除されることです。
オプションファイル
'Loading'画面
アプリケーションが起動している間、Rhodesはカスタム"Loading"画面の表示をサポートします。この画面のソースファイルloading.htmlは、<application-root>/app /loading.htmlに位置しています。
または、シンプルな画像を表示する必要な場合、loading.htmlをイメージファイルloading.pngに置き換えることができます。
rhoconfig.txtの"Loading"パラメータは:
- delay - どのくらいのスプラッシュ画面表示されるか(秒単位)
- center、vcenter、hcenter - 画像の配置
- zoom,vzoom,hzoom - スケーリングオプション
例:
- splash_screen='delay=5;center'
- splash_screen='delay=5;hcenter;vzoom'
'Install'画面
AndroidとiPhoneでは、Rhodesアプリケーションは最初の起動時、インストールを完了する必要があります。これを適切にユーザに示すため、アプリケーションは<application-root>/app/フォルダにあるinstalling.htmlもしくはinstalling.pngを提供すべきでしょう。このようなファイルがなければ、上記のように'Loading'画面が使用されます。
エラーハンドラ(400/500)
Rhodesは、以下のエラーページを:app\E400.erbと、app\E500.erbで表示できます。
- Rho::RecordNotFound例外が発生したとき、error 400が発生します。(たとえば、存在しないobjectIDを検索した時)
- その他の処理されない例外の発生時に、error 500が発生します。
レイアウト
Rhodesは、ERBのテンプレートに基づいたレイアウトのメカニズムをサポートしています。デフォルトのレイアウト・テンプレートは"layout.erb"でアプリケーションのルートフォルダにあります。上書きしない限り、このレイアウトは、すべての非Ajaxリクエストにrenderされます。
カスタマイズレイアウト
レイアウトの動作を上書きしたりカスタマイズしたい場合は、次のパラメータでrender関数を呼び出すことができます:
render :action => 'index', :layout => 'mycustomlayout', :use_layout_on_ajax => false
最初の引数は、レンダリングするアクションです。次の引数はオプショナルなレイアウトの名前で、ベースディレクトリとしてアプリケーションのルートを想定しています。上記の例で、Rhodesは、アプリケーションのルートディレクトリの"mycustomlayout.erb"を探します(レイアウトテンプレートの使用を無効にするには, :layout => false を使用することもできます)。use_layout_on_ajax引数は、RhodesがAjax呼び出しでレイアウトを使うかどうかを指定します(デフォルト値はfalseです)。
デフォルトのレイアウト名を上書きして、コントローラでレイアウトメソッドを呼び出すこともできます:
layout :mycustomlayout
これは、レンダリングの呼び出しを、このコントローラのすべてのアクションのデフォルトのレイアウトファイルとしてmycustomlayout.erbを使用することを強制します。
ヘルパー
link_to
link_toメソッドを使用する方法の例:
link_to "Visit Other Site", "http://www.rhomobile.com/"
==> <a href="http://www.rhomobile.com/" >Visit Other Site</a>
link_to "Help", { :action => "help" }
==> <a href="/app/model/help" >Help</a>
link_to "Delete", { :action => "delete", :id => '{12}' }
==> <a href="/app/model/{12}/delete" onclick="var f = document.createElement('form');
f.style.display = 'none';this.parentNode.appendChild(f); f.method = 'POST';
f.action = this.href;f.submit();return false;">Delete</a>
link_to "Show", { :action => "show", :id => '{12}'},"style=\"height:4px;width:7px;border-width:0px;\""
==> <a href="/app/model/{12}/show" style="height:4px;width:7px;border-width:0px;">Show</a>
link_to "Delete", { :action => "delete", :id => '{12}' }, "class=\"delete_link\""
==> <a href="/app/model/{12}/delete" class="delete_link" onclick="var f = document.createElement('form');
f.style.display = 'none';this.parentNode.appendChild(f); f.method = 'POST';
f.action = this.href;f.submit();return false;\">Delete</a>"
link_to "Invite",:action => :invite, :query => {:name => 'John Smith', 'address' => "http://john.smith.com"}
==> <a href="/app/model/invite?name=John%20Smith&address=http%3A%2F%2Fjohn.smith.com" >Invite</a>
url_for
url_forメソッドを使用する方法の例:
url_for '/some_url'
==> /some_url
新しいURLを生成するとき、欠けた値は現在のリクエストのパラメータで埋められることがあります。例えば、アプリケーション名やモデルが呼び出しパラメータで指定されていない場合、それらはリクエストから埋められるでしょう。
url_for :action => :index
==> /app/model
url_for :action => :create
==> /app/model
url_for :action => :new
==> /app/model/new
url_for :action => :show, :id => '{12}'
==> /app/model/{12}/show
url_for :model => :another_model, :action => :show, :id => '{12}'
==> /app/another_model/{12}/show
url_for :controller => :another_controller, :action => :show, :id => '{12}'
==> /app/another_controller/{12}/show
url_for :application => :another_app, :model => :another_model, :action => :show, :id => '{12}'
==> /another_app/another_model/{12}/show
url_for :action => :create, :query => {:name => 'John Smith', 'address' => "http://john.smith.com"}
==> /app/model?name=John%20Smith&address=http%3A%2F%2Fjohn.smith.com
url_for :action => :show, :id => '{12}', :fragment => "an-anchor"
==> /app/model/{12}/show#an-anchor
Renderの高度な利用法
- レンダリングは、各メソッドの最後に呼び出される必要はありません。レンダリングが呼び出されていない場合、メソッドのアクション・レンダリングがデフォルトになります
- ビューのレンダリングはコントローラのメソッドなしで動作します。アクションに対するメソッドが存在せず、アクションのビューが存在する場合は、そのビューがレンダリングされます。
- ファイルのレンダリング render :file => "Settings/wait.erb"は現在のコントロール・インスタンスでそのファイルをレンダリングします。デフォルトでは、ファイルをレンダリングするとき、レイアウトはfalseです。
- collectionもしくはlocalのpartialレンダリング。collectionやlocalは提供される必要があります。他のフォルダのpartialレンダリングは2.0で追加しました。
render :partial => "ad", :collection => ["foo1","foo2","foo3"]
または
render :partial =>"ad", :locals => { :ad => "foo_ad" }
はpartical "_ad.erb"をレンダリングし、ローカル変数"ad"が利用可能になります。collectionの場合、partialは要素ごとにレンダリングされます。
2.0で追加
'partials'フォルダからロード:
render :partial =>"partials/ad", :locals => { :ad => "foo_ad" }
WebViewのクラス
WebView(ブラウザ)を直接コントローラから呼び出すことが可能です。このAPIは、同期コールバックやカメラコールバックなどのようなコールバックから使用をお勧めします。
WebView.refresh #=> will force WebView refresh current page
WebView.navigate(url) #=> will force WebView navigate to provided location (url)
# Since 1.2.2 WebView.navigate supports an optional index parameter (defaults to 0, useful for tabbed applications)
WebView.navigate(url, index)
WebView.current_location #=> will return location (url) of the currently displayed page
WebView.execute_js(js) #=> will try to execute javascript string in the context of the currently displayed page
#supported on iPhone, Android, Windows Mobile and Blackberry 5.0 in full browser mode
#For example:
WebView.execute_js("test();") #call method test from current page
Suppose that current page has js method:
function test() {
alert("Test");
}
WebView.active_tab #=> returns index of @tabs array for currently selected tab
WebView.full_screen_mode(enable) #=> switch to/from full screen mode
# Set cookie to be used by WebView for specified url. Each time when WebView load specified url
# (either by selecting link or in result of calling WebView.navigate), it will add this cookie
# to the HTTP request. Cookie should be in format "NAME=VALUE". Multiple name/value pairs allowed.
# In this case they need to be split by semicolon: "NAME1=VALUE1; NAME2=VALUE2".
WebView.set_cookie(url, cookie)
例
コールバックでWebViewを使う方法の例のいくつかは、system API sample applicationの/app/Imageフォルダのコントローラとビューを参照してください。
プラットフォームごとのファイル
プラットフォームごとに、'app'または'public'フォルダにある任意のファイルを個別のファイルとして使用することができます。これを行うには、ファイルの名前の2番目をプラットフォームにしたファイルを作成します。たとえば、Androidプラットフォームでこれらのファイルを置き換えるために...
default.css
index.erb
...の場合、行う必要があるのは2つのファイルを追加することです
default.android.css
index.android.erb
プラットフォーム上で置き換えられるには、基本となるファイルが存在する必要がありますので注意してください。
有効なプラットフォーム名は
- android
- wm
- bb
- iphone
0 件のコメント:
コメントを投稿