我正在使用MVC 4和KnockoutJs,我遇到了这种情况
我有一个对象(称为父对象),它有一个名为ChildType
的属性_如果ChildType = 1 --->我将使用ViewModel-A渲染Partial-A _如果ChildType = 2 --->我将使用ViewModel-B
渲染Partial-B我发现没有太多关于我的问题的文章或答案。最重要的是,他们建议使用一个主ViewModel,不知何故它是最好的方式,但如果我们有超过2个子视图模型,则意味着主视图模型如此之大。
所以,请帮我实现它。
此致..
答案 0 :(得分:0)
使用模板绑定
<!-- ko template: { name: childTemplate, data: childModel } -->
<!-- /ko -->
childTemplate是一个可观察的,可以是计算的,也可以是标准的observable,它将返回一个字符串,其中包含要呈现的模板的名称。 childModel一个observable或computed,它将返回所选的childModel
此外,如果childModel可以为null,则需要在模板绑定中添加if检查,否则会出现空错误
<!-- ko template: { name: childTemplate, data: childModel, if: childModel } -->
<!-- /ko -->
答案 1 :(得分: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>