KnockoutJS - Можем ли мы иметь вызов Observable Function для обновлений CSS - PullRequest
0 голосов
/ 12 октября 2019

У меня есть система тикетов, которая написана на KnockOut с использованием шаблона. Структура шаблона указана ниже. Этот шаблон повторяется для нескольких пользователей на странице. В этом parent.AssignedTickets - это список идентификаторов Ticket, назначенных пользователям.

<script type="text/html" id="TicketAssignmentTemplate">
<td>
   <label data-bind="css: {success: $root.getCheckStatus(TicketId, $root.AllAssignedTickets)}">
      <input type="checkbox" data-bind="checkedValue: TicketId, checked: $parent.AssignedTickets" />
    </label>
</td>
<td>
    <label data-bind="text: title"></label>
</td>
self.getCheckStatus = function (itkID, ListID ) {
    if (ListID.indexOf(itkID)>= 0)  
       return true;
    else 
       return false;
}

<style>.success{background-color: #DFF0D8;}</style>

Таким образом, система имеет несколько идентификаторов TicketID, и если он назначен пользователю, установив флажок, parent.AssignedTickets обновляется, и я обновляю root.AllAssignedTickets, оба из которых являются наблюдаемыми массивами. Теперь я хочу изменить цвет метки для флажка, который обновляется с помощью getCheckStatus (TicketId, $ root.AllAssignedTickets).

Можно ли сделать функцию наблюдаемой для обновления CSS в реальном времени, когда флажок установлен или не установлен?

1 Ответ

0 голосов
/ 12 октября 2019

Это не работает, потому что вы передаете AllAssignedTickets в качестве параметра. Если вы сделаете это так:

self.getCheckStatus = function (itkID) {
    return self.AllAssignedTickets.indexOf(itkID) > -1;
}

<label data-bind="css: { success: $root.getCheckStatus(TicketId) }">

Knockout создаст внутреннюю подписку и будет работать нормально.

...