淘汰组件可以递归组合吗?

时间:2016-01-14 15:01:30

标签: knockout.js

可以递归地组合淘汰组件 - 我正在尝试构建具有面板内面板的面板的ui ....

我知道/我认为我可以使用淘汰模板来实现这一点但我正在尝试使用组件(因为这些似乎是未来(?)。< / p>

无论如何我会尝试,看看我是否能让它发挥作用。但我很想知道我是否在浪费时间。

1 个答案:

答案 0 :(得分:4)

我希望这个递归组件样本可以帮助您:

function ComponentModel(params) {
  params = params || {};
  params.innerComponentsCount = params.innerComponentsCount || 0;
  var result = {
    name: 'name',
    components: ko.observableArray()
  };
  while(params.innerComponentsCount > 0) {
    var childModel = new ComponentModel();
    childModel.name = childModel.name + params.innerComponentsCount;
    result.components.push(childModel);
    params.innerComponentsCount--;
  }
  return result;
} 

ko.components.register('my-component', {
    template: { element: 'my-component-template' },
    viewModel: {
        createViewModel: function(params, componentInfo) {
            return new ComponentModel(params);
        }
    },
});
 
ko.applyBindings();
.my-component {
  border: 1px solid black;
  padding: 5px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>

<template id='my-component-template'>
    <div class="my-component">
      <div data-bind='text: name'></div>
      <!-- ko foreach: components -->
        <my-component></my-component>
      <!-- /ko -->
    </div>
</template>

<my-component params="innerComponentsCount: 2"></my-component>