https://jsbin.com/jigefipiye/edit?html, консоль, выход
У меня есть 2 шаблона, один из которых использует видимую и невидимую привязку, а другой использует # if () #
<div>Template 1</div>
<div id="to-bind1" data-bind="source: Data" data-template="template1"></div>
<div>Template 2</div>
<div id="to-bind2" data-bind="source: Data" data-template="template2"></div>
<script id="template1" type="x">
<li>
# if (Readonly) { #
<span data-bind="text: Val"></span>
# } else { #
<input data-bind="value: Val" />
# } #
</li>
</script>
<script id="template2" type="x">
<li>
<span data-bind="visible: Readonly, text: Val"></span>
<input data-bind="invisible: Readonly, value: Val" />
</li>
</script>
<script>
var toBind1 = $("#to-bind1");
var toBind2 = $("#to-bind2");
var vm = kendo.observable({
Data: [{
Readonly: true,
Val: "Woot!"
}],
});
kendo.bind(toBind1, vm);
kendo.bind(toBind2, vm);
setTimeout(function() {
console.log('dfs')
vm.get('Data')[0].set('Readonly', false);
}, 5000)
</script>
после 5 секунд Template2 переключается на поле ввода, а Template1 остается прежним

проблема в том, что в template2 ввод скрыт, чего я хочу добиться вместо ввода скрыть ввод с помощью span и наоборот
что-то похожее на привязку if в нокауте JS https://knockoutjs.com/documentation/if-binding.html
if ( и если нет) играют роль, аналогичную видимым (и скрытым) привязкам. Разница в том, что при использовании visible видимая разметка всегда остается в DOM и к ней всегда применяются свои атрибуты привязки данных - видимая привязка просто использует CSS, чтобы переключать видимость элемента контейнера. Однако привязка if физически добавляет или удаляет содержащуюся разметку в DOM и применяет привязки к потомкам только в том случае, если выражение истинно.