Я новичок в библиотеках нокаутов, и мы работаем над iPad-приложением. Ситуация заключается в том, когда пользователь проверяет флажок на HTML-странице, нам нужно добавить новый div на странице с некоторыми текстовыми полями в нем и удалить его, когда он уберет их.
Следует отметить: новый div привязан к данным, которые должны быть загружены по умолчанию в текстовое поле или выбраны.
Это iPad-приложение для iPad. Он использует нокаут, jQuery, JS и HTML с MVVM.
Вопрос в том, может ли Knockout связывать элементы html после загрузки страницы, так как пользовательский обработчик работает/регистрируется только во время init и может быть создан динамический div с помощью js и html, если да, то как установить его между двумя статическими div?
Вы можете связывать элементы после загрузки страницы с помощью ko.applyBindings(viewModel, ElementSelector), например:
ko.applyBindings(myModel, $("#myDiv"));
Однако это не то, что вы обычно хотите делать. Гораздо проще использовать привязку If в Knockout, которая будет динамически добавлять или удалять дочерние элементы со страницы.
<input type="checkbox" data-bind='checked: showChild' />
<div id="container" data-bind="if: showChild">
<!-- stuff here will only be generated if the checkbox is selected -->
</div>
Если у вас было несколько разных элементов для показа, основанных на значении чего-либо, скажем, в списке выбора, вы можете использовать функцию шаблона:
//viewmodel properties
self.Options = ko.observableArray(["Name", "Age", "Height"])
self.TemplateToUse = ko.observable()
//html
<select data-bind="options: Options, value: TemplateToUse">
</select>
<div data-bind='template: { name: TemplateToUse }'>
<!-- template whose name is selected value -->
</div>
//templates
<script type="text/html" id="Age">
<span>Age</span>
</script>
<script type="text/html" id="Name">
<span>Name</span>
</script>
<script type="text/html" id="Height">
<span>Height</span>
</script>