0

我正在使用 MVC 4 和 KnockoutJs,但我遇到了这种情况

我有一个对象(称为父对象),它有一个名为 ChildType 的属性

_ 如果 ChildType = 1 ---> 我将使用 ViewModel-A 渲染 Partial-A
_ 如果 ChildType = 2 ---> 我将使用 ViewModel-B 渲染 Partial-B

我没有找到太多关于我的问题的文章或答案。最重要的是,他们建议使用主视图模型,不知何故这是最好的方法,但如果我们有超过 2 个子视图模型,则意味着主视图模型太大了。

所以,请帮我实现它。

问候..

4

2 回答 2

0

使用模板绑定

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

childTemplate 是一个 observable,可以是计算的或标准的 observable,它将返回一个带有要渲染的模板名称的字符串。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 -->

然后,在您的视图模型中添加以下 observable: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 回答