Нокаут JS Наблюдаемый не обновляется в шаблоне - PullRequest
0 голосов
/ 19 января 2020

У меня есть переключатель на промежутке, когда класс обновляется в Knockout JS. Когда я выхожу из значения Observable, это правильно. Тем не менее, класс флажка не переключается, как ожидалось. Вот код JS и шаблон, который я использую ...

JS

viewModel.toggleRequiredAnswer = function(self, index) {
    // Other unrelated code using index param here
  var checkedTest = viewModel
      .data()
      .conditionalRequired.requiredIf.some(function(arr) {
        return arr === index;
    });
    self.isChecked = ko.observable(checkedTest);
};

Knockout JS template

<ul class="list" data-bind="foreach: list">
    <li>
        <span
          class="glyphicon glyphicon-admin"
          data-bind="
                    click: $parent.toggleRequiredAnswer($data, $data.value),
                    css: $data.isChecked() ? 'glyphicon-check' : 'glyphicon-unchecked'"
        >
            </span>
        <span data-bind="text: $data.text"></span>
    </li>
</ul>

1 Ответ

2 голосов
/ 20 января 2020

Когда функция toggleRequiredAnswer вызывается, вы перезаписываете атрибут self.isChecked новым наблюдаемым, и представление нокаута теряет связь с ним. Функция toggleRequiredAnswer должна выглядеть примерно так:

viewModel.toggleRequiredAnswer = function(self, index) {
    // Other unrelated code using index param here
  var checkedTest = viewModel
      .data()
      .conditionalRequired.requiredIf.some(function(arr) {
        return arr === index;
    });
    self.isChecked(checkedTest);
};
...