将敲除数据的结果分成2列

时间:2017-11-07 19:20:02

标签: html css knockout.js

很奇怪是否有一种简单的方法可以通过Knockout和HTML将以下代码拆分为2列。我知道如何在CSS中做到这一点,但实际上只是将结果分成1-5和6-9。这是我的代码。附上截图。谢谢here

         <div class="item summary">
              <h3> <?=l(479)?> </h3>
                <div data-bind="foreach:$data.summary">
                  <div>
                   <span data-bind="text:$data.sequence + '.'"></span>
                    <span data-bind="text:$data.label + ':'"></span>
                    <span data-bind="text:$data.value"></span>
                  </div>
              </div>
           </div>

1 个答案:

答案 0 :(得分:2)

如果长度不会改变,您可以复制每个块的标记并添加slice()。它不是最优雅的,但它可能是最简单的。

<!-- ko if: summary && summary.length > 0 -->
    <div data-bind="foreach: $data.summary.slice(0,5)">
        ...
    <div data-bind="foreach: $data.summary.slice(5)">
        ...
<!-- /ko -->

如果你想要一些更动态的东西,你可以创建一个计算函数,将你的数组分成多个部分,然后使用嵌套的foreach:

&#13;
&#13;
function viewModel(){
    var self = this;
    this.summary = [
      new Summary(1),
      new Summary(2),
      new Summary(3),
      new Summary(4),
      new Summary(5),
    ];
    
    this.summaryBlocks = ko.computed(function(){
      if(self.summary && self.summary.length > 0){
      var size = self.summary.length / 2;
        return [
          self.summary.slice(0,size), 
          self.summary.slice(size)
        ];
      }else{
        return [];
      }
    });
}

function Summary(val){
    this.sequence = 'sequence';
    this.label = 'label';
    this.value = val;    
}

ko.applyBindings(new viewModel());
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>

<div class="item summary">
  <h3> <?=l(479)?> </h3>
  <div data-bind="foreach: summaryBlocks">
    <div style="display:inline-block; vertical-align:top;" data-bind="foreach:$data">
      <div>
        <span data-bind="text:$data.sequence + '.'"></span>
        <span data-bind="text:$data.label + ':'"></span>
        <span data-bind="text:$data.value"></span>
      </div>
    </div>
  </div>
</div>
&#13;
&#13;
&#13;

编辑:处理可变数量列的另一个片段

&#13;
&#13;
function viewModel() {
  var self = this;

  this.columns = ko.observable(1);
  this.summary = [new Summary(1), new Summary(2), new Summary(3), new Summary(4), new Summary(5), new Summary(6), new Summary(7), new Summary(8), new Summary(9)];

  this.summaryBlocks = ko.pureComputed(function() {
    var result = [];
    for (var i = 0; i < self.columns(); i++) result.push([]);

    if (self.summary && self.summary.length > 0) {
      for (var i = 0; i < self.summary.length; i++) {
        var col = i % self.columns();
        result[col].push(self.summary[i]);
      }
    }
    return result;
  });
}

function Summary(val) {
  this.sequence = 'sequence';
  this.label = 'label';
  this.value = val;
}

ko.applyBindings(new viewModel());
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>

columns: <span data-bind="text: columns"></span>
<br/><input type="range" min=1 max=5 data-bind="value: columns" />

<div class="item summary">
  <div data-bind="foreach: summaryBlocks">
    <div style="display:inline-block; vertical-align:top;" data-bind="foreach:$data">
      <div style="border: 1px dashed blue;">
        <span data-bind="text:'item ' + value"></span>
      </div>
    </div>
  </div>
</div>
&#13;
&#13;
&#13;