2015-10-29 56 views
1

是否可以在自定义淘汰赛组件内使用条件逻辑?目标是根据提供给挖空组件的特定参数渲染不同的模板。自定义淘汰赛组件

以一个非常简单的例子:

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 
} 

这可能吗?

更新:

的解决方案,我接受几乎作品。我发现,淘汰赛寻找模板的第一个声明。之后,您无法更新模板。对他的代码进行轻微的修改,并且工作。像这样:

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>' 
} 

回答

4

你可以做这样的事情

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>' 
} 
+0

这看起来像诸如此类的事情,我脑子里想 – user3619165

0

你可以有一个组件分支到不同的组件。它会将视图模型转换为正确的组件。

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