У меня есть одиночная страница CRUD с использованием Knockout, все работает нормально, я получаю данные из вызова JSON, заполняя массив с контролируемым наблюдением со списком объектов. Я могу добавлять или редактировать отдельные элементы в этом массиве.Ноутаут автомата с форматированным столбцом (вычисленный?)
Проблема связана с форматированием валютного (числового) столбца, который я показываю в таблице со списком объектов. Я попытался использовать js-функции во многих отношениях, но форматированный объем валюты таблицы не обновляется при обновлении элемента. Если я использую привязку для форматирования поля, то я не могу ее редактировать, потому что он преобразуется в строку.
Для меня необходим столбец с форматированием в одностороннем порядке (автоматически обновляется) для моего столбца валюты. Но я не могу создать вычисляемый столбец сразу, потому что я использую automapped массив объектов. Я попытался добавить вычисление с использованием примера в http://knockoutjs.com/documentation/plugins-mapping.html, но я не знаю, как его использовать с отображенным массивом.
Мой ViewModel что-то вроде этого:
//--Accounts - Viewmodel Knockout
function accountViewModel() {
var self = this;
self.accounts = ko.observableArray(); //this is the list of objects
self.account = ko.observable(); //single item for creating or editing
//--get list------
self.getAccounts = function() {
$.postJSON(appURL + 'Accounts/GetList', function (data) {
ko.mapping.fromJS(data.Records, {}, self.accounts);
});
};
self.getAccounts();
}
Каждый элемент учетной записи есть поля, такие как: -id -Name -Баланс < - это столбец, я хочу отформатировать
Использование это на странице:
<table data-bind="visible: accounts().length > 0">
<thead>
<tr>
<th scope="col">Id</th>
<th scope="col">Name</th>
<th scope="col">Balance</th>
</tr>
</thead>
<tbody id="accounts" data-bind="foreach: accounts">
<tr>
<td><span data-bind="text: Id"></span></td>
<td><a href="" data-bind="text: Name, click: $root.getdetails" style="display:block;"></a></td>
<td style="text-align:right;">
<span data-bind="text: formatCurrency(Balance), css: { negative: Balance() < 0, positive: Balance() > 0 }"></span>
</td>
</tr>
</tbody>
</table>
formatCurrency - это просто функция js для formatti ng число:
formatCurrency = function (value) {
debugger;
if (value!=undefined)
return "$" + withCommas(value().toFixed(2));
//had to use value() instead of value, because of toFixed
}
Спасибо!
Возможный дубликат использования плагина сопоставления и вычисления на сопоставленном объекте: http://stackoverflow.com/questions/15480316/knockout-dynamic-binding-issue/15480602#15480602 –