残念ながら、これに適した API は (まだ) ありません。ただし、以下のコードを使用すると、モデルのプロパティを元の状態に保ちながら、ビューでカスタム フォーマットを実現できます。
can.view.attr('can-somecustom-value', function(el, data) {
var attr = el.getAttribute('can-somecustom-value'),
value = data.scope.computeData(attr, {
args: []
}).compute;
new FormattedValue(el, {
value: value
//value is the only one we really care about, but
//you could specify other arbitrary options here
//such as "format: 'MM/DD/YYYY' to be used in your __format methods below"
});
});
var FormattedValue = can.Control.extend({
init: function () {
this.set();
},
__format: function() {
// return formatted version of this.options.value;
},
__deformat: function() {
// return this.element[0].value sans format(keeps your model pristine);
},
'{value} change': 'set',
set: function () {
if (!this.element) {
return;
}
var self = this;
setTimeout(function() {
self.element[0].value = self.__format();
});
},
'change': function () {
if (!this.element) {
return;
}
this.options.value(this.__deformat());
}
});
これにより、次のことが可能になります。
<input can-somecustome-value="myDateProp"/>
ここで、「myDateProp」は can.Map/can.Model/etc の属性です。
これにより、入力にカスタム文字列形式が表示されますが、 someModel.attr('myDateProp') は引き続き ISO 形式を返します (これは、ISO 形式もサーバーに保存されることを意味します)。
ビューのレンダリングのみに固有のフォーマットを制御できるようにするためのフィルター/パーサーの追加に関して、内部で議論が行われています。