Ниже приведен очень упрощенный вариант моего кода ..Добавление и удаление объекта из массива, когда наблюдаемый создан из knockout.mapping
Мой HTML-код:
<div class="container body-content" data-bind="foreach:base">
<div class="col-md-12" data-bind="with:s">
<div class="col-md-4"><pre data-bind="text:sp"></pre></div>
<div class="col-md-7">
<div class="row" data-bind="foreach: spd">
<input type="text" class="form-control" data-bind="value:value, valueUpdate: 'input'" />
<button data-bind="click: $parent.addval">add</button><button data-bind="click: $parent.removeval">rem</button>
</div>
</div>
</div>
</div>
Мой Javascript код:
<script src="knockout-3.2.0.js"></script>
<script src="knockout.mapping.js"></script>
<script>
var data = [{
"s": {
"sp": "abc",
"spd": [
{
"value": ""
}
]
},
"type": "xyz",
}];
var AppScope = function() {
function BaseViewModel() {
var self = this;
self.base = ko.observableArray();
self.base(ko.mapping.fromJS(data)());
}
ko.applyBindings(new BaseViewModel());
}();
</script>
Массив «данных» поступает с сервера и имеет сложную структуру данных, поэтому $ root не может быть использован. Возможно, этот стиль использован here.
Код работает, за исключением кнопок. Я хотел бы понять, как добавить объект {value: ""} к массиву в 'spd' и удалить его при нажатии addval и remval.
Вся помощь искренне оценили Спасибо
Спасибо, но не будет работать. У моего массива данных есть несколько объектов, я только что привел один здесь, чтобы показать структуру данных. Также фактический объект, поступающий с сервера, имеет сложную структуру данных, поэтому не может использовать $ root. Кое-что вроде http://knockoutjs.com/documentation/unobtrusive-event-handling.html должно быть использовано, но, к сожалению, неспособно выяснить. – Arnab
Как насчет сейчас? Обработчики кликов передают '$ parent' (который' s', исходящий из 'with' binding) и элемент данных в' addval' и 'removeval'. –