Templates 自定义淘汰组件

Templates 自定义淘汰组件,templates,knockout.js,components,Templates,Knockout.js,Components,是否可以在自定义敲除组件内部使用条件逻辑?目标是根据提供给敲除组件的特定参数呈现不同的模板 <!-- ko if: someParam === 'templateA' --> <componentA params="viewModel: $component"></componentA> <!-- /ko --> <!-- ko if: someParam === 'templateB' --> <componen

是否可以在自定义敲除组件内部使用条件逻辑?目标是根据提供给敲除组件的特定参数呈现不同的模板

<!-- ko if: someParam === 'templateA' -->
    <componentA params="viewModel: $component"></componentA>
<!-- /ko -->
<!-- ko if: someParam === 'templateB' -->
    <componentB params="viewModel: $component"></componentB>
<!-- /ko -->
举一个非常简单的例子:

ko.components.register('network', {
    viewModel : function(params) {
        var someParam = params.someDeterminer;
    },
    template : render different template entirely (maybe loaded from external file) based on the value of someParam
}
这可能吗

更新:

我接受的解决方案几乎奏效。我发现knockout查找模板的第一个声明。之后,您将无法更新模板。对他的代码稍加修改就行了。大概是这样的:

ko.components.register('network', {
    viewModel : function(params) {
        var self = this;
        var someParam = params.someDeterminer;


        if(someParam=="somecondition")
            this.templateToLoad("someTemplate")
        else 
            this.templateToLoad("someOtherTemplateToLoad")

    },
template : '<div data-bind="template:{name: templateToLoad}"></div>'
}
ko.components.register('network'){
viewModel:函数(参数){
var self=这个;
var someParam=params.somedeterminator;
if(someParam==“somecondition”)
this.templateToLoad(“someTemplate”)
其他的
this.templateToLoad(“someOtherTemplateToLoad”)
},
模板:“”
}

您可以拥有一个分支到不同组件的组件。它将视图模型向下转发到正确的组件中

<!-- ko if: someParam === 'templateA' -->
    <componentA params="viewModel: $component"></componentA>
<!-- /ko -->
<!-- ko if: someParam === 'templateB' -->
    <componentB params="viewModel: $component"></componentB>
<!-- /ko -->

您可以拥有一个分支到不同组件的组件。它将视图模型向下转发到正确的组件中

<!-- ko if: someParam === 'templateA' -->
    <componentA params="viewModel: $component"></componentA>
<!-- /ko -->
<!-- ko if: someParam === 'templateB' -->
    <componentB params="viewModel: $component"></componentB>
<!-- /ko -->

您可以执行以下操作

ko.components.register('network', {
    viewModel : function(params) {
        var self = this;
        var someParam = params.someDeterminer;
        self.templateToLoad = ko.observable();

        if(someParam=="somecondition")
            self.templateToLoad("someTemplate")
        else self.templateToLoad("someOtherTemplateToLoad")

    },
    template : '<div data-bind="template:{name: templateToLoad}"></div>'
}
ko.components.register('network'){
viewModel:函数(参数){
var self=这个;
var someParam=params.somedeterminator;
self.templateToLoad=ko.observable();
if(someParam==“somecondition”)
self.templateToLoad(“someTemplate”)
else self.templateToLoad(“someOtherTemplateToLoad”)
},
模板:“”
}

您可以执行以下操作

ko.components.register('network', {
    viewModel : function(params) {
        var self = this;
        var someParam = params.someDeterminer;
        self.templateToLoad = ko.observable();

        if(someParam=="somecondition")
            self.templateToLoad("someTemplate")
        else self.templateToLoad("someOtherTemplateToLoad")

    },
    template : '<div data-bind="template:{name: templateToLoad}"></div>'
}
ko.components.register('network'){
viewModel:函数(参数){
var self=这个;
var someParam=params.somedeterminator;
self.templateToLoad=ko.observable();
if(someParam==“somecondition”)
self.templateToLoad(“someTemplate”)
else self.templateToLoad(“someOtherTemplateToLoad”)
},
模板:“”
}