ho un problema quando vincolante valore di data al testo utilizzando eliminazione diretta, come si vede nella foto qui sotto Binding Data utilizzando Knockoutjs
Quando la pagina viene caricata per la prima volta, sto usando Ajax per ottenere i dati 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);
}
...
}
Il controller restituisce il risultato in 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);
}
formica il risultato è:
[{"AccountStatementID":2,"CompanyID":1,"Description":"test","Amount":1000,"ReceiptDate":"/Date(1447261200000)/","Type":"Payment"}]
nella vista, io lo mostro utilizzando questo codice:
<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>
Ecco il codice per formattare la data:
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; });
}
};
A questo punto, la data viene visualizzata nel formato giusto, quindi se ho cliccato pulsante di modifica, il ReceiptDate nella casella di testo non è formattato.
Codice in ReceiptDate TextBox:
<input type="text" placeholder="Enter Receipt Date" class="form-control fdatepicker" readonly="readonly" data-bind="value: AccountStatement().ReceiptDate" />
Se cambio al data-bind="date: AccountStatement().ReceiptDate"
la casella di testo sarà vuota.
Come formattare la data nella casella di testo?
UPDATE
ho cambiato la data gestore vincolante come in questo link ma il valore TextBox del ReceiptDate è ancora /Date(1447261200000)/
Cambiamenti in vista:
<input type="text" placeholder="Enter Receipt Date" class="form-control fdatepicker" readonly="readonly" data-bind="date: AccountStatement().ReceiptDate" />
e la data di la ricevuta nel tavolo è vuota:
<td data-bind="date: ReceiptDate"></td>
qualcosa di simile http://jsfiddle.net/LkqTU/27696 /. evviva –
@supercool grazie per il collegamento ma non funziona. Nel link qui sopra, si usa il formato di data comune (gg/mm/aaaa), mentre nel mio caso il valore della data è in formato data json/data (1447261200000)/'. Ho modificato la mia domanda per fornire ulteriori informazioni. – Willy
prova l'impostazione 'self.ReceiptDate = ko.observable (1447261200000);' e controlla, funziona ancora. il momento decodificherà fino alla data e il formato specificato. –