Knockoutjs-components
KnockoutJS-コンポーネント
コンポーネントは、大規模なアプリケーションを構築し、コードの再利用性を促進するためのUIコードを編成するための巨大な方法です。
他のコンポーネントから継承またはネストされています。 ロードおよび構成については、独自の規則またはロジックを定義します。
アプリケーションまたはプロジェクト全体で再利用できるようにパッケージ化されています。 アプリケーションの完全なセクションまたは小さなコントロール/ウィジェットを表します。 オンデマンドでロードまたはプリロードできます。
コンポーネント登録
コンポーネントは、* ko.components.register()* APIを使用して登録できます。 KOのコンポーネントをロードして表現するのに役立ちます。 登録には、構成のあるコンポーネント名が必要です。 構成は、viewModelとテンプレートを決定する方法を指定します。
構文
コンポーネントは次のように登録できます-
- component-name には、空でない任意の文字列を指定できます。
- viewModel はオプションであり、次のセクションにリストされているviewModel形式を使用できます。
- template は必須であり、次のセクションにリストされているテンプレート形式を使用できます。
ViewModelの記述
次の表に、コンポーネントの登録に使用できるviewModel形式を示します。
Sr.No. | viewModel Forms & Description |
---|---|
1 |
constructor function コンポーネントごとに個別のviewModelオブジェクトを作成します。 オブジェクトまたは関数は、コンポーネントビューでバインドするために使用されます。 |
2 |
shared object instance viewModelオブジェクトインスタンスは共有されます。 インスタンスプロパティは、オブジェクトを直接使用するために渡されます。 |
3 |
createViewModel ファクトリとして機能し、オブジェクトを返すことができるビューモデルとして使用できる関数を呼び出します。 |
4 |
AMD module これは、モジュールと依存関係の両方が非同期にロードされるモジュールを定義するためのモジュール形式です。 |
テンプレートの記述
次の表に、コンポーネントの登録に使用できるテンプレート形式を示します。
Sr.No. | Template Forms |
---|---|
1 |
element ID |
2 |
element instance |
3 |
string of markup |
4 |
DOM nodes |
5 |
document fragement |
6 |
AMD module |
単一のAMDモジュールとして登録されたコンポーネント
AMDモジュールは、viewModel/templateのペアを使用せずに、コンポーネントを単独で登録できます。
コンポーネントのバインド
コンポーネントのバインドには2つの方法があります。
- 完全な構文-パラメータとオブジェクトをコンポーネントに渡します。 次のプロパティを使用して渡すことができます。
- name -コンポーネント名を追加します。
- params -コンポーネントのオブジェクトに複数のパラメーターを渡すことができます。
- 短縮構文-文字列をコンポーネント名として渡しますが、パラメータは含まれません。
- テンプレートのみのコンポーネント-コンポーネントは、viewModelを指定せずにテンプレートのみを定義できます。
- コンテナ要素なしでコンポーネントを使用する-追加のコンテナ要素を使用せずにコンポーネントを使用できます。 これは、コメントタグと同様の*コンテナレスフロー*コントロールを使用して実行できます。
カスタム要素
カスタム要素は、コンポーネントをレンダリングする方法です。 ここでは、プレースホルダーを定義する代わりに、自己記述的なマークアップ要素名を直接記述できます。プレースホルダーは、コンポーネントをバインドする場所です。
パラメータを渡す
- 親コンポーネントと子コンポーネント間の通信-コンポーネントはそれ自体ではインスタンス化されないため、viewmodelプロパティはコンポーネントの外部から参照されるため、子コンポーネントのviewmodelによって受信されます。 たとえば、次の構文では、 ModelValue が親viewmodelであり、子viewModelコンストラクター ModelProperty によって受信されることがわかります。
- 観測可能な式を渡す-paramsパラメーターに3つの値があります。
- simpleExpression -それは数値です。 オブザーバブルは含まれません。
- simpleObservable -親viewModelで定義されているインスタンスです。 親viewModelは、子viewModelによって行われたobservableの変更を自動的に取得します。
- observableExpression -式がそれ自体で評価される場合、式はオブザーバブルを読み取ります。 観測可能な値が変化すると、式の結果も時間とともに変化する可能性があります。
次のようにパラメータを渡すことができます-
私たちは次のようにviewModelのパラメータを渡すことができます-
コンポーネントにマークアップを渡す
受信したマークアップはコンポーネントの作成に使用され、出力の一部として選択されます。 次のノードは、コンポーネントテンプレートの出力の一部として渡されます。
カスタム要素タグ名の制御
カスタム要素の登録
デフォルトのコンポーネントローダーが使用されているため、コンポーネントが ko.components.register を使用して登録されている場合、カスタム要素はすぐに使用可能にできます。 ko.components.register を使用せず、カスタムコンポーネントローダーを実装していない場合は、任意の要素名を定義することでカスタム要素を使用できます。 ko.components.register を使用している場合、カスタムコンポーネントローダーは構成を使用しないため、構成を指定する必要はありません。
例
出力
上記のコードがどのように機能するかを確認するために、次の手順を実行してみましょう-
- 上記のコードを component_register ファイルに保存します。 *このHTMLファイルをブラウザーで開きます。
コンポーネントローダー
コンポーネントローダーは、指定されたコンポーネント名に対してテンプレート/viewModelのペアを非同期的に渡すために使用されます。
デフォルトのコンポーネントローダー
デフォルトのコンポーネントローダーは、明示的に登録された構成に依存します。 各コンポーネントは、コンポーネントを使用する前に登録されます。
コンポーネントローダーユーティリティ関数
デフォルトのコンポーネントローダーは、次の関数を使用して読み書きできます。
Sr.No. | Utility functions & Description |
---|---|
1 |
コンポーネントが登録されています。 |
2 |
ko.components.isRegistered(name) 特定のコンポーネント名がすでに登録されている場合、trueまたはfalseとして返されます。 |
3 |
ko.components.unregister(name) コンポーネント名がレジストリから削除されます。 |
4 |
ko.components.get(name, callback) この関数は、登録された各ローダーに順番にアクセスして、コンポーネント名のviewModel/template定義を最初に渡した人を見つけます。 次に、 callback を呼び出してviewModel/template宣言を返します。 登録されたローダーがコンポーネントに関する情報を見つけられなかった場合、* callback(null)*を呼び出します。 |
5 |
ko.components.clearCachedDefinition(name) この関数は、指定されたコンポーネントキャッシュエントリをクリアするときに呼び出すことができます。 次回コンポーネントが必要な場合は、再度ローダーに相談します。 |
カスタムコンポーネントローダーの実装
カスタムコンポーネントローダーは、次の方法で実装することができます-
- * getConfig(name、callback)*-名前に応じて、プログラムで構成を渡すことができます。 callback(componentConfig)を呼び出して構成を渡すことができます。ここで、loadComponentまたはその他のローダーがコンポーネントcomponentConfigを使用できます。
- * loadComponent(name、componentConfig、callback)*-この関数は、設定方法に応じて、configのviewModelとテンプレート部分を解決します。 callback(result)を呼び出して、viewmodel/templateのペアを渡すことができます。オブジェクトの結果は、次のプロパティによって定義されます。
- テンプレート-必須。 DOMノードの配列を返します。
- * createViewModel(params、componentInfo)*-オプション。 viewModelプロパティの設定方法に応じて、viewModelオブジェクトを返します。
- * loadTemplate(name、templateConfig、callback)*-DOMノードは、カスタムロジックを使用してテンプレートに渡されます。 オブジェクトtemplateConfigは、オブジェクトcomponentConfigのテンプレートのプロパティです。 callback(domNodeArray)は、DOMノードの配列を渡すために呼び出されます。
- * loadViewModel(name、templateConfig、callback)*-viewModelファクトリは、カスタムロジックを使用してviewModel構成で渡されます。