Knockout подписка: как избежать двух вызовов в подписке, когда подписанный наблюдаемый очищается?

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

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

Этого можно было бы избежать с помощью условного «если» (observableTwo), но мне интересно, есть ли какая-то функция, которая выполняет эту задачу вместо условного «если». Я пробовал с cleanNode, но не работает.

Это скрипка: http://jsfiddle.net/wabe/nLYyf/

Я не хочу отписываться от наблюдаемого, потому что он должен прослушиваться после звонка.


person Mario Guerrero    schedule 03.07.2012    source источник


Ответы (1)


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

чтобы исправить это... вместо того, чтобы установить observableTwo, поместите его в тайм-аут...

setTimeout(function(){ self.observableTwo(''); },0);

как подавить рекурсивное уведомление, я не вижу никакого «официального» способа. То, как вы это делаете, или другие варианты, где вы можете использовать флаг, или, возможно, придумать общую функцию-оболочку, которая сортирует это за вас.

person Keith Nicholas    schedule 04.07.2012
comment
Fiddle был простым способом показать поведение, но вы правы с исправлением! А насчет отсутствия поддержки такого поведения боюсь вы тоже правы. Надеюсь, в будущем с помощью ko можно будет использовать более чистый способ. Спасибо, я очень ценю вашу точку зрения, Кит! - person Mario Guerrero; 04.07.2012