そのような HTML を挿入する代わりに、強力なテンプレート エンジンを使用します。テンプレートをスクリプトタグとして挿入し、次のように使用する必要がある標準エンジンを使用すると、さまざまな方法で実行できます。
<div data-bind="foreach: widgets">
<!-- ko template: { name: view, data: $data } --><!-- /ko -->
</div>
上記のソリューションにはview
、テンプレート名を持つメンバーが必要です。これにより、VM とビューの間の結合が作成され、さらにテンプレートの構文が乱雑になります。
Knockout.BindingConventions というライブラリを作成しました。これは、明示的な構成よりも規則を優先する暗黙のライブラリです。その機能の 1 つは、ViewModel をビューに接続することです。htmlは次のようになります
<div data-name="widgets">
<!-- ko name: $data --><!-- /ko -->
</div>
ウィジェットの配列に が含まれている場合はテンプレートCalendarWidgetViewModel
を探し、 も含まれている場合はテンプレートを探します。CalendarWidgetView
ContactsWidgetViewModel
ContactsWidgetView
ウィキ
nugeでインストール
Install-Package Knockout.BindingConventions
上記のソリューションでは、スクリプト タグとしてテンプレートを使用する必要があります
ajax を使用してオンデマンドでテンプレートをロードする外部テンプレート ソース エンジンがあります。
例https://github.com/ifandelse/Knockout.js-External-Template-Engine
上記のコンベンションライブラリを使用する独自のものを作成しました
ウィキ
構成したら (テンプレート リクエストを処理する残りのサービスを作成する必要があります)、あとは実行するだけですbootstrap.loadView(model, this.view);
モデル タイプを調べてビュー名を解決し、その ViewModel のすべてのビューをキャッシュまたはサーバーから取得します。