Выделение пользовательской привязки Knockout, Identify Update вызывается изменениями, а не изначально [duplicate]

Кажется, есть много вопросов об этой проблеме с java.util.Scanner. Я думаю, что более читаемым / идиоматическим решением было бы вызвать scanner.skip("[\r\n]+"), чтобы удалить любые символы новой строки после вызова nextInt().

ИЗМЕНИТЬ: как показано ниже, как @PatrickParker, это вызовет бесконечный цикл, если пользовательские входы любые пробелы после номера. См. Их ответ на лучший шаблон для использования с пропуском: https://stackoverflow.com/a/42471816/143585

1
задан HischT 13 August 2015 в 10:26
поделиться

2 ответа

Как я могу сделать огонь предупреждения при каждом изменении, кроме первоначально?

Нокаут будет вызывать обратный вызов обновления первоначально, когда привязка применяется к элемент и отслеживать любые зависимости (наблюдаемые / вычисленные), к которым вы обращаетесь. Когда какая-либо из этих зависимостей изменится, обратный вызов обновления будет вызван еще раз.

Я не думаю, что можно запустить только изменения, а не изначально.

Вы можете создайте обходное решение, соответствующее вашему сценарию, добавив событие изменения, связанное с вашим элементом внутри init.

init: function(element, valueAccessor) {
   // element should be the element you want to attach change event.
   $(element).on('change', function (value)
   {
      // do your stuff.
    });
}
0
ответ дан jtabuloc 25 August 2018 в 14:59
поделиться

Вот один из способов: сохраните массив элементов, который update заполняет своим элементом, если его нет (это первый раз он запускается) и в противном случае делает любое действие. Поскольку у вас есть настраиваемый обработчик привязки, вы можете просто отключить его.

ko.bindingHandlers.test = {
  update: function(element, valueAccessor) {
    var seenElements = ko.bindingHandlers.test.seen,
      val = valueAccessor()();
    if (seenElements.indexOf(element) >= 0) {
      alert("Test");
    } else {
      seenElements.push(element);
    }
  }
};
ko.bindingHandlers.test.seen = [];

var vm = {
  alertOn: ko.observable(0),
  raiseAlert: function() {
    vm.alertOn.notifySubscribers();
  }
};
ko.applyBindings(vm);
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<div data-bind="test:alertOn"></div>
<button data-bind="click:raiseAlert">Update</button>

1
ответ дан Roy J 25 August 2018 в 14:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: