だいたい561日前に更新最終更新日時: 2008-08-27 (水) 11:33:14 561日前
現在の位置
Memorycraft Wiki > バインディング、プロパティ、オブザーバー
バインディング、プロパティ、オブザーバー
SproutCore?ではプロパティ、オブザーバーおよびバインディングのおかげでたった数行のコードで大規模なアプリケーションを作成することが出来ます。これら3つの機能はともに、アプリケーションの様々な部品を結びつけしばしば大きなアプリケーションの大部分を占めてしまう"グルーコード"*1のほとんどを排除します。これらの機能がどう働くかを理解することで、SproutCore? APIがもたらすその他のコンポーネントをベストな方法で使用することが出来ます。
このトピックでは、SproutCore?のプロパティ、オブザーバーおよびバインディングがいかに動作し、またどのようにあなたのアプリケーションで使用できるかの詳細を説明します。
プロパティ、オブザーバー、バインディングについて
プロパティ、オブザーバーおよびバインディングはともにアプリケーションの現在の状態を保持するために動作し、またその状態を知る必要があるあなたのコードに中継します。ここでは、それらがどのように機能するかの高度な説明を記載します。
- プロパティ プロパティは、連絡先の"firstName"やボタンの"isEnabled"プロパティの様にあなたのアプリケーションの、ある状態を保持します。ほとんどのプロパティは数値や文字列やオブジェクトのようにシンプルな値です。しかし必要であれば、プロパティの値を動的に"計算"する関数の形で記述することもできます。
- オブザーバー オブザーバーは他のプロパティに変更があったときに呼び出されるメソッドです。それらメソッドは新しい状態、UIにビューが追加されたり、変更された値をサーバーに送信したりした場合などに動作を始めます。
- バインディング バインディングは、2つのオブジェクトのプロパティを互いに"結びつけ"、一方が変化するともう一方も変更されるというCocoaの手法を借用した物です。バインディングはモデル、ビューおよびコントローラーなどのあなたのアプリケーションの2つの部品をおおまかにつなぎます。バインディングを使用することで、あなたのアプリケーションを保守しやすくし、関連のある全てのコンポーネントを最新の状態に保つことを確実にします。
以下のダイアグラムはこれら3つの機能が、一般的なアプリケーションにおいて、モデルオブジェクトのfirstNameプロパティの変更にともないテキストフィールドを変更するために、どのように相互動作するかを示しています。firstNameとvalue はバインディングによって互いに結びつけられています。contact.firstNameプロパティを変更すると、バインディングはtextFieldView?.valueプロパティを同じ値に更新します。これは新しい値を反映するために可視コンテンツを更新するvalueDidChange?() オブザーバーを呼び出すきっかけとなります。
あなたのアプリケーションでのプロパティ、オブザーバー、バインディングの使用
通常、SproutCore?で書かれたアプリケーションは 他のほとんどのフレームワークで見られるような、モデルオブジェクトにorから 変更を中継するための、とても小さな”グルーコード”*2を含んでいます。その代わりに、お互いが現在の状態をプロパティとして公開する一連の小さなコンポーネント群としてアプリケーションをデザインする必要があります。アプリケーションのその他の部分は、プロパティを直接変更するかバインディングを使ってプロパティを直接接続することによって、各コンポーネントが相互動作することができます。この設計によって、あなたのアプリケーションから大量のコードを取り除くことができ、一方では、各コンポーネントを個別にあつかうため、テストや管理しやすいコードになります。
内部的に、あなたの作るコンポーネントはそれらのプロパティの変更に対応するためにオブザーバーを使用すべきです。またコンポーネントは現在の状態を反映させるためのプロパティを更新すべきです。たとえば、典型的なCheckboxButtonView?は以下のようなプロパティとメソッドで設計されるかもしれない。
このクラスでは、valueプロパティはチェックボックスの現在値(ブーリアン値;trueなら選択されている状態)を表します。isEnabledプロパティはチェックボックスの有効無効を判定します。内部的にこのクラスはチェックボックスの見た目を変更するために、isEnabledプロパティの変化の通知を受ける一つのオブザーバー isEnabledObserver?() を実装しています。またこのクラスではマウスクリックに反応し、それに応じてプロパティを変更するためのmouseDown()メソッドも実装されています。
もちろん、それでもあなたのアプリケーションのオブジェクトでは従来のメソッドを実装することも出来ます。たとえば、サーバーに変更を保存したいモデルオブジェクトがある場合、保存処理をするためのcommitChanges()メソッドを実装することがよくあります。このメソッドはプロパティ、オブザーバーおよびバインディングのどのインフラも使用しません。
一般的な経験則として、他の言語やフレームワークで通常getter/setterを記述するような部分にプロパティ、オブザーバーおよびバインディングを使用するとよいでしょう。もし実装しようとしている機能がこのパターンにあまりフィットしない場合は、かわりに通常のメソッドを使用してください。
次は
この説明を終えて、あなたは各項目に深く踏み込む準備が整ったことになります。以下のプロパティ、オブザーバーおよびバインディングについての詳しい章に目を通して、さらにこの機能を最有効利用するためのSproutCore?オブジェクトの正しい設計の仕方を読んでください。
- ドキュメント予定地.
関連リンク
SproutCoreのプロパティパスについて – SproutCore?においてオブジェクト参照をするためにプロパティパスがどのように使用されるかについての詳細な情報
- 関連ページ
- Memorycraft Wiki561日前
- SproutCore ドキュメント翻訳561日前
ツールボックス
メニュー
リンク
最新の20件
最新の20件
- Memorycraft Wiki
- SproutCore ドキュメント翻訳
- バインディング、プロパティ、オブザーバー

