我有一個使用Knockout的CRUD單頁,一切正常,我從JSON調用中獲取數據,它使用對象列表填充自動映射的可觀察數組。 我可以在該數組中添加或編輯單個項目。具有格式化(計算?)列的自動映射陣列
問題出現在格式化一個貨幣(數字)列,我在表中顯示的對象列表。我試過用很多方法使用js函數,但是當我更新一個項目時,表格的格式化貨幣數量不會更新。 如果我使用綁定來格式化字段,那麼我無法編輯它,因爲它轉換爲字符串。
我需要的是我的貨幣列的單向綁定(自動更新)格式化列。但我無法立即創建計算列,因爲我使用的是自動映射的對象數組。我嘗試使用http://knockoutjs.com/documentation/plugins-mapping.html中的示例添加計算,但我不知道如何將其與映射數組一起使用。
我的視圖模型是這樣的:
//--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 雜牌 - 剩餘< - 這是我想格式化
使用列它在頁面中:
<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函數數字:
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 –