首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何根据条件更改绑定处理程序?

如何根据条件更改绑定处理程序?
EN

Stack Overflow用户
提问于 2018-07-29 21:47:11
回答 2查看 49关注 0票数 0

我希望基于某个条件对表列使用不同的绑定处理程序,例如:

代码语言:javascript
复制
<tbody data-bind="foreach: plansList">
    <tr>
        <td data-bind="numVotes > 0 ? (html: voteOptionLinked) : (text: voteOption)"></td>

在一种情况下,我想使用html处理程序绑定一个链接,但在另一种情况下,我只想使用text处理程序显示它。上面的方法不起作用,因为handler:必须出现在data-bind属性的开头,但是有没有办法在Knockout中做到这一点呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-30 01:56:14

一种变通方法,但它可以实现您想要的功能:

代码语言:javascript
复制
<tr>
    <!-- ko if: numVotes() > 0 -->
        <td data-bind="html: voteOptionLinked"></td>
    <!-- /ko -->
    <!-- ko ifnot: numVotes() > 0 -->
        <td data-bind="text: voteOption"></td>
    <!-- /ko -->
</tr>
票数 1
EN

Stack Overflow用户

发布于 2018-07-30 02:33:27

您可以使用自定义绑定:

代码语言:javascript
复制
ko.bindingHandlers.customBinder = {
    init: function(element, valueAccessor, allBindings) {
        
    },
    update: function(element, valueAccessor, allBindings, viewModel) {
        var numVotes = valueAccessor();
        if (numVotes() > 0){
          var html = viewModel.voteOptionLinked;
          element.innerHTML = html;
        }
        else {
          var text = viewModel.voteOption;
          element.textContent = text;
        }
    } 
};

// ----------------------------------------------------------------------------
// Page viewmodel



function SurveyViewModel() {
    this.numVotes = ko.observable(4);
    this.voteOptionLinked = '<span>ab</span><span>dfsdf</span>';
    this.voteOption = 'zzzzzz';
}

ko.applyBindings(new SurveyViewModel());
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>
<div data-bind="customBinder:numVotes">

</div>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51580951

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档