Используйте значение нокаута, наблюдаемого в табличных данных, для применения класса CSS

#javascript #css #knockout.js

#javascript #css #knockout.js

Вопрос:

Я изо всех сил пытаюсь заставить работать привязку KO CSS. portAvailable является наблюдаемым логическим значением, присутствующим в каждом устройстве в $root.devices . Когда порт устройства недоступен, portAvailable is false , и класс CSS text-warning должен быть добавлен к td элементу для устройства.

Привязка ifnot данных под ним работает, поэтому что-то не так с тем, как я пытаюсь применить привязку данных CSS, а не саму наблюдаемую.

 <table class="table table-condensed">
<thead>
    <tr>
        <td style="text-align:center">{{ _('Name') }}</td>
        <td style="text-align:center">{{ _('Port') }}</td>
    </tr>
</thead>
<tbody data-bind="sortable: { data: $root.devices, options: { cancel: '.unsortable', handle: '.moveDevice', axis:'y'} }">
    <tr>
        <td><span data-bind="text: name"></span></td>
        <td data-bind="css: {'text-warning': portAvailable == false}">
            <span data-bind="text: port"></span>
            <i class="fa fa-exclamation-triangle" title="{{ _('Port currently unavailable') }}" data-bind="ifnot: portAvailable"></i>
        </td>
        <td style="text-align:right">
            <div class="btn-group">
                <a href="#" class="btn btn-mini moveDevice"><i class="fa fa-arrows-alt" aria-hidden="true"></i></a>
            </div>
        </td>
    </tr>
</tbody>
  

Ответ №1:

Я предполагаю portAvailable , что это наблюдаемое. Вам нужно развернуть его в выражении:

 <td data-bind="css: {'text-warning': portAvailable() === false}">
  

Причина ifnot , по которой привязка работает, заключается в том, что, как и все привязки, если все, что они получают, является наблюдаемым, оно при необходимости развернет наблюдаемое для вас.

Комментарии:

1. Это работает, спасибо! Оказывается ifnot , это тоже не сработало, но ваш ответ и там работает.