Я использую плагин jQuery Steps для создания мастера, и на втором шаге вы добавите 1.. * fields, который представляет собой массив объектов JSON, которые будут отправлены на сервер. Я пытаюсь использовать Knockout, чтобы показать ввод для каждого имени поля.
При щелчке новое пустое поле должно быть помещено в массив, и должно отображаться текстовое поле. Однако функция addField не срабатывает внутри шагов form/jquery. Если я его уберу, то получится. Есть ли способ предотвратить вмешательство шагов jQuery в привязку? Вот сокращенная версия кода:
function AppViewModel() {
var self = this;
self.fields = ko.observableArray([]);
self.addField = function() {
// push field to self.fields
}
}
ko.applyBindings(new AppViewModel());
// jQuery Steps
var form = $("#stepsForm");
form.children("div").steps({
headerTag: "h3",
bodyTag: "section",
transitionEffect: "slideLeft",
stepsOrientation: "vertical"
});
table {
border: 1px solid blue;
}
td {
border: 1px solid red;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.1.0/knockout-min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-steps/1.1.0/jquery.steps.min.js"></script>
<form id="stepsForm" action="#" novalidate>
<div class="form-container">
<h3>Section1</h3>
<section>
<table class="table table-condensed">
<tr data-bind="foreach: fields">
<td>
<div data-bind="text:FieldName"></div>test
</td>
</tr>
</table>
<button data-bind="click: addField">Add another</button>
</section>
</div>
</form>