2016-05-04 5 views
0

KnockoutJSはViewLocatorを実装する方法を提供していますか?KnockoutJSでViewLocatorを実装できますか?

ViewLocatorはコンポーネントバインディングと似ていますが、違いはViewModelオブジェクトにバインドされ、 が自動的に正しいビューを生成してインスタンス化してバインドすることです。例えば

私はこの

<div data-bind="component: $data"></div> 

または

<div data-bind="component: $data.DetailsViewModel"></div> 

または

<div data-bind="viewLocator: $data.DetailsViewModel"></div> 

を書きたいと私はそれが命名規則を使用して見つけ、DetailsView.htmlを作成したいですDataViewにバインドされたDetailsViewModelにバインドします。

注:コンポーネント名を指定する必要はなく、コンポーネントを手動で登録する必要はありません。

これは可能ですか?

+0

「DetailsView.htmlを見つけて作成する」とはどういう意味ですか?どこでそれを見つけるべきですか? – B3rn475

+0

いくつかの慣例を使ってテンプレートを見つける – atomaras

+0

適切な努力を払うことができれば可能です。 IMOのこの質問は、SOに適しているためにはあまりにも多くの努力が必要です。グーグルの「viewLocator」では、あなたがDurandalのバックグラウンドから来ていると思われます。そのように、彼らはそれをどのように実装したかを見るための第一歩として示唆しています。 – Tyblitz

答えて

0

カスタムコンポーネントローダーを使用して実装できます。

http://knockoutjs.com/documentation/component-loaders.html

、ビューにそれを公開するカスタムcreateViewModelで使用されるパラメータを使用して、完全なビューモデルを注入。

<div data-bind='component: { 
    name: "DetailsView", 
    params: { injectModel: DetailsViewModel} 
}'></div> 
+0

名前を明示的に指定したくありません。私はそれが命名規則を使用してコードを介して発生したい – atomaras

+0

私も何も登録する必要はありません。私の命名規則は、コンポーネントを自動的に検索することができます。 – atomaras

+0

"DatailsView" w.r.t.の書き方の違いは何ですか? DetailsViewModel?コンポーネントの「名前」を修正しています。最初の方法で、変数名から「モデル」を削除する方法を明示的に指定します。実際的な違いはありません。 – B3rn475

関連する問題