Tôi đã có một vấn đề khi ràng buộc giá trị ngày tháng để textbox sử dụng loại trực tiếp, như đã thấy trong hình dưới đây Binding ngày sử dụng Knockoutjs
Khi trang web được tải lần đầu tiên, tôi đang sử dụng ajax để nhận được dữ liệu AccountStatements.
function AccountStatementViewModel(companyID) {
var self = this;
...
var AccountStatement = {
AccountStatementID: self.AccountStatementID,
CompanyID: self.CompanyID,
Description: self.Description,
Amount: self.Amount,
ReceiptDate: self.ReceiptDate,
Type: self.Type
}
self.AccountStatement = ko.observable();
self.AccountStatements = ko.observableArray();
$.ajax({
url: webroot + 'AccountStatement/GetAccountStatements',
contentType: 'application/json; charset=utf-8',
data: { id: self.CompanyID },
cache: false
}).done(function (data) {
self.AccountStatements(data);
});
...
self.edit = function (accountStatement) {
$('#lnkAddAccountStatement').hide('blind', 1000);
$('#pnlAddEditAccountStatement').show('blind', 1000);
self.AccountStatement(accountStatement);
}
...
}
Controller trả về kết quả trong json:
public JsonResult GetAccountStatements(int id)
{
var accountStatementsVM = db.AccountStatements
.Where(a => a.CompanyID == id)
.Select(a => new AccountStatementViewModel
{
AccountStatementID = a.AccountStatementID,
CompanyID = a.CompanyID,
Description = a.Description,
Amount = a.Amount,
ReceiptDate = a.ReceiptDate,
Type = a.Type
})
.ToList();
return Json(accountStatementsVM, JsonRequestBehavior.AllowGet);
}
kiến kết quả là:
[{"AccountStatementID":2,"CompanyID":1,"Description":"test","Amount":1000,"ReceiptDate":"/Date(1447261200000)/","Type":"Payment"}]
Trong View, tôi hiển thị nó sử dụng mã này:
<tbody data-bind="foreach: AccountStatements, visible: AccountStatements().length > 0">
<tr>
<td data-bind="attr: { id: AccountStatementID }">
<a href="#" class="btn btn-primary btn-xs" data-bind="click: $root.edit"><i class="glyphicon glyphicon-pencil"></i></a>
<a href="#" class="btn btn-danger btn-xs" data-bind="click: $root.delete"><i class="glyphicon glyphicon-remove"></i></a>
</td>
<td data-bind="text: Description"></td>
<td data-bind="text: Amount"></td>
<td data-bind="date: ReceiptDate"></td>
</tr>
</tbody>
Đây là mã để định dạng ngày:
ko.bindingHandlers.date = {
update: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
var valueUnwrapped = ko.utils.unwrapObservable(valueAccessor());
var textContent = moment(valueUnwrapped).format("DD/MM/YYYY");
ko.bindingHandlers.text.update(element, function() { return textContent; });
}
};
Ở bước này, ngày được hiển thị ở đúng định dạng, sau đó nếu tôi nhấp vào nút chỉnh sửa, biên nhận trong hộp văn bản không được định dạng.
Mã cho ReceiptDate TextBox:
<input type="text" placeholder="Enter Receipt Date" class="form-control fdatepicker" readonly="readonly" data-bind="value: AccountStatement().ReceiptDate" />
Nếu tôi thay đổi để data-bind="date: AccountStatement().ReceiptDate"
hộp văn bản sẽ được bỏ trống.
Cách định dạng ngày trong hộp văn bản?
CẬP NHẬT
Tôi đã thay đổi xử lý ràng buộc ngày như trong link này nhưng giá trị TextBox của ReceiptDate vẫn là /Date(1447261200000)/
Những thay đổi trong giao diện:
<input type="text" placeholder="Enter Receipt Date" class="form-control fdatepicker" readonly="readonly" data-bind="date: AccountStatement().ReceiptDate" />
và ngày biên nhận trong bảng bị trống:
<td data-bind="date: ReceiptDate"></td>
một cái gì đó như thế này http://jsfiddle.net/LkqTU/27696 /. chúc mừng –
@supercool cảm ơn vì liên kết nhưng nó không hoạt động. Trong liên kết ở trên, bạn đã sử dụng định dạng ngày chung (dd/mm/yyyy), trong khi trong trường hợp của tôi, giá trị ngày ở định dạng ngày tháng json '/ Date (1447261200000) /'. Tôi đã chỉnh sửa câu hỏi của mình để cung cấp thêm thông tin. – Willy
thử đặt 'self.ReceiptDate = ko.observable (1447261200000);' và kiểm tra nó, nó vẫn hoạt động. thời điểm sẽ giải mã thành ngày và định dạng u được chỉ định. –