代码之家  ›  专栏  ›  技术社区  ›  Jez

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

  •  0
  • Jez  · 技术社区  · 6 年前

    我希望根据条件对表列使用不同的绑定处理程序,例如:

    <tbody data-bind="foreach: plansList">
        <tr>
            <td data-bind="numVotes > 0 ? (html: voteOptionLinked) : (text: voteOption)"></td>
    

    在一种情况下,我希望使用 html 但在另一种情况下,我只想使用 text 处理程序。以上不起作用,因为 handler: 必须在 data-bind 属性,但有没有一种方法可以在淘汰赛中做到这一点?

    2 回复  |  直到 6 年前
        1
  •  1
  •   Ray    6 年前

    一个解决方案,但它可以实现您想要的:

    <tr>
        <!-- ko if: numVotes() > 0 -->
            <td data-bind="html: voteOptionLinked"></td>
        <!-- /ko -->
        <!-- ko ifnot: numVotes() > 0 -->
            <td data-bind="text: voteOption"></td>
        <!-- /ko -->
    </tr>
    
        2
  •  0
  •   Ray    6 年前

    可以使用自定义绑定:

    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());
    <script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>
    <div data-bind="customBinder:numVotes">
    
    </div>