Таблица не обновляется после изменения связанного наблюдаемого массива
Я застрял и был бы признателен за помощь!
У меня есть метод create в моей ViewModel, который вызывает простой метод CreateEntity для добавления нового элемента в наблюдаемый массив типа Office. Все это идет хорошо, и длина наблюдаемого массива соответственно увеличивается - НО!
по какой-то странной причине строки таблицы не обновляются соответственно - что я делаю неправильно???
Это таблица разметки:
<table class="table table-striped table-bordered table-condensed" data-bind='visible: offices().length > 0'>
<thead>
<tr>
<td class="thead">Office Name</td>
<td class="thead">Support Tel.</td>
<td class="thead">Support Email</td>
<td class="thead">Support Fax</td>
<td class="thead">Ftp URL</td>
<td class="thead" />
</tr>
</thead>
<tbody data-bind='foreach: offices'>
<tr class="">
<td>
<input data-bind='value: officeName' />
</td>
<td>
<input data-bind='value: supportNo' />
</td>
<td>
<input data-bind='value: supportEmail' />
</td>
<td>
<input data-bind='value: supportFax' />
</td>
<td>
<input data-bind='value: supportFtp' />
</td>
<td>
<div class="button-bar">
<button class="btn btn-danger"
data-bind="click: deleteOffice, disable: hasChanges">
Delete
</button>
</div>
</td>
</tr>
</tbody>
</table>
Это мой код ViewModel
define(['services/officesEntityService',
'durandal/plugins/router',
'durandal/system',
'durandal/app',
'services/logger'],
function (officesEntityService, router, system, app, logger) {
var offices = ko.observableArray();
var isSaving = ko.observable(false);
var isDeleting = ko.observable(false);
var activate = function () {
return officesEntityService.getOffices(offices);
};
...
var addOffice = function () {
offices.push(officesEntityService.createOffice());
}
...
var vm = {
offices: offices,
isSaving: isSaving,
isDeleting:isDeleting,
activate: activate,
goBack: goBack,
hasChanges: hasChanges,
cancel: cancel,
canSave: canSave,
save: save,
canAdd:canAdd,
addOffice:addOffice,
deleteOffice: deleteOffice,
canDeactivate: canDeactivate,
title: 'Offices Administration'
};
return vm;
});
Наконец, мой Breeze Data Service предоставляет эту функцию, используемую в виртуальной машине, для помещения нового офиса в наблюдаемый массив:
var createOffice = function () {
return manager.createEntity('Office', { officeId: jQuery.Guid.New(), officeName: 'New Office'});
};
1 ответ
Нашел проблему...
<td>
<div class="button-bar">
<button class="btn btn-danger"
data-bind="click: deleteOffice, disable: hasChanges">Delete
</button>
</div>
</td>
Я изменил тег кнопки для <a href>
, применяется тот же стиль и проблема исправлена!