Я использую Knockoutjs и подключаемый модуль сопоставления для создания моделей представлений из JSON, возвращенных из вызова сервера. Я получаю массив с сервера, создаю модель, которая имеет сопоставленный массив в качестве свойства, затем данные привязывают массив к шаблону для отображения всех данных на экране. Который отлично работает.
Я бы хотел, чтобы рядом с каждым элементом отображалась кнопка, которая позволяла бы мне его удалить, как в примере в это видео (см. примерно 14:20).
Но в видео он привязывается к функции, определенной на элементах массива. Мои элементы генерируются из JSON с помощью подключаемого модуля сопоставления, поэтому я не уверен, как добавить функцию к каждому элементу и хочу ли я это сделать. Или я могу привязать нажатие кнопки к функции в модели представления и передать идентификатор элемента, с которым связана кнопка?
мой джаваскрипт:
<script type="text/javascript">
var supplierModel;
$(function(){
getAllSuppliers();
})
function getAllSuppliers(){
$.getJSON('/SWM60Assignment/allsuppliers',function(responseData){
supplierModel = new SupplierModel(responseData);
ko.applyBindings(supplierModel);
});
}
var SupplierModel = function (supplierList) {
var self = this;
self.suppliers = ko.mapping.fromJS(supplierList);
self.remove = function(supplierId){
// how can I get the buttons to call this method with the id
// of the element they are the button for?
alert('remove called with supplier id:'+supplierId);
}
};
</script>
а это шаблон:
<script id="supplierTemplate" type="text/html">
<li>
Name: <span data-bind="text:name"></span> Address: <span data-bind="text:address"></span>
<button data-bind="click:<what can I put here to bind correctly>>">Remove supplier</button>
</li>
</script>
и HTML для полноты:
<ul class="vertical" data-bind="template:{name:'supplierTemplate',foreach:suppliers}"></ul>