Reputation: 8646
Hi all I have formatted the date in knock out js as follow using moment.js
<div data-bind="text: moment(formatDate).format('DD-MMM-YY')"></div>
but when date is null it is displaying as invalid date
how can I show empty text here instead of invalid date
Upvotes: 1
Views: 1016
Reputation: 15053
You could use an expression within text
:
<div data-bind="
text: ko.unwrap(formatDate) ? moment(formatDate).format('DD-MMM-YY') : ''
"></div>
Or use an extender:
ko.extenders.formatDate = function(target, format) {
var result = ko.computed({
read: target,
write: function(newValue) {
var current = target(),
valueToWrite = !newValue || isNaN(newValue) ? '' : moment(newValue).format(format);
// only write if it changed
if (valueToWrite !== current) {
target(valueToWrite);
} else {
if (newValue !== current) {
target.notifySubscribers(valueToWrite);
}
}
}
}).extend({notify: 'always'});
result(target());
return result;
};
Then use it like this:
var someDateObservable = ko.observable();
var someDateObservableFormatted = someDateObservable.extend({
formatDate: 'DD-MMM-YY'
});
Upvotes: 3