2015-10-29 70 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 -->