列表数据绑定上的Bootstrap popover

时间:2016-10-20 15:17:40

标签: javascript knockout.js bootstrapping

我有一个元素列表,其中的字段包括'类别','名称'和'价值'我在表格中绑定:

<table class="table" data-bind="visible: document.pvm.tehnicalTab().length > 0">
   <thead>
      <tr>
         <td>Category</td>
         <td>Name[86, 0]</td>
         <td>Value[439, 0]</td>
      </tr>
   </thead>
   <tbody data-bind="foreach: elemList()">
      <tr>
         <td data-bind="text: $data.Category"></td>
         <td data-bind="text: $data.Name"></td>
         <td data-bind="text: $data.Value"></td>
      </tr>
   </tbody>

我试图为每个值字段添加一个弹出窗口,该字段将显示一个带有随机数的邮件。

我补充说:

 <div data-bind='component: "tehnical-val"'></div>

在Value字段中:

<td data-bind="text: $data.Value">
   <div data-bind='component: "tehnical-val"'></div>
</td>

和它的javascript:

    ko.components.register('tehnical-val', {
template: '<a href="#" data-toggle="popover" data-trigger="focus" data-html="true" data-placement="right" container="body" tabindex="0" data-contentwrapper=".cartContent" data-original-title="" title="">' +
    'VID=7' + '</a>'
        });

但是当我点击其中一个带有列表值的标签时,没有任何事情发生。 有没有办法在列表数据绑定字段上添加弹出窗口?

1 个答案:

答案 0 :(得分:1)

我建议创建一个custom binding来调用元素上的$().popover()函数。 e.g。

ko.bindingHandlers.bootstrapPopover = {
  init: function(element, valueAccessor) {
    var $el = $(element);
    $el.attr('data-toggle', 'popover');
    $el.attr('data-trigger', 'hover');
    $el.attr('data-html', 'true');
    $el.attr('data-placement', 'left');
    $el.attr('data-content', ko.unwrap(valueAccessor()));
    $el.popover();
  } 
};

然后将绑定添加到元素,例如

<div data-bind="text: $data.value, bootstrapPopover: $data.popoverContent"></div>

我已经使用绑定创建了JSFiddle example。请注意,这是一个非常基本的绑定。它为每个元素调用$()。popover(),并且它不会动态更新弹出窗口内容。所以还有改进的余地。

enter image description here