0

私は MVC 4 と KnockoutJs を使用していますが、このシナリオで行き詰まります

ChildTypeという名前のプロパティを持つオブジェクト(親と呼ばれる)があります

_ ChildType = 1 の場合 ---> Partial-A を ViewModel-A でレンダリングします
_ ChildType = 2 の場合 ---> Partial-B を ViewModel-B でレンダリングします

私の問題に関する記事や回答はあまり見つかりませんでした。何よりも、彼らはマスターViewModelを提案していますが、どういうわけかそれが最善の方法ですが、2つ以上の子ビューモデルがある場合、マスターViewModelが非常に大きいことを意味します.

だから、それを実装するのを手伝ってください。

よろしく..

4

2 に答える 2

0

テンプレート バインディングを使用する

<!-- ko template: { name: childTemplate, data: childModel } -->
<!-- /ko -->

childTemplate はオブザーバブルであり、計算されたオブザーバブルまたは標準のオブザーバブルであり、レンダリングするテンプレートの名前を含む文字列を返します。選択された childModel を返すオブザーバブルまたは計算された childModel

また、childModel が null になる可能性がある場合は、if チェックをテンプレート バインディングに追加する必要があります。そうしないと、null エラーが発生します。

<!-- ko template: { name: childTemplate, data: childModel, if: childModel } -->
<!-- /ko -->
于 2012-12-11T09:37:35.097 に答える
0

テンプレート バインディングを使用します。

 <!-- ko template: { name: templateName, data: modelName, if: modelName } -->
 <!-- /ko -->

次に、ビュー モデルに次のオブザーバブルを追加します: templateName と modelName。

ビュー モデルはおそらく次のようになります。

var parent = {
    ChildType: ko.observable(1),
    templateName: ko.observable('Partial-A'),
    modelName: ko.observable(ViewModelA)
};

次に行うことは、 ChildType の値に従って templateName と modelName を設定することです。

var option = parent.ChildType();

if(option == 1)
{
      parent.modelName(null);
      parent.templateName('Partial-A');
      parent.modelName(ViewModelA);
 }

テンプレート名を変更する前に、modelName を null に設定することが非常に重要です。これは、ko がバインディングを適用できないためです。

次に、次のようにテンプレートを定義します。

<script id="Partial-A" type="text/html">  
 // your code goes here
</script>
于 2013-01-24T16:13:03.733 に答える