私は、metro.js の日付ピッカーとノックアウトを使ってハッキングしようとしていました。これまでのところ、私の日付ピッカー バインディング コードは次のようになります。
ko.bindingHandlers.datepicker = {
init: function(el, va, ba, model, ctx) {
var prop = va();
$(el).datepicker({
onSelect: function(txt, date) {
prop(date);
}
});
},
update: function(el, va, ba, model, ctx) {
var prop = va();
var date = ko.unwrap(prop);
if(date) {
applyDate(date);
}
function applyDate(dt) {
var j = $(el);
var dp = j.data('datepicker');
var inp = j.find('input');
var fmt = dp.options.format;
var sDate = format(fmt, dt);
// dp._calendar.calendar.dayClick(sDate, dt);
// inp.value = sDate;
dp._calendar.calendar('setDate', sDate);
j.find('input').val(dp._calendar.calendar('getDate')).trigger('change', sDate);
}
function format(fmt, dt) {
fmt = fmt.replace('yyyy', dt.getFullYear());
fmt = fmt.replace('mm', pad(dt.getMonth() + 1));
fmt = fmt.replace('dd', pad(dt.getDate()));
return fmt;
}
function pad(n) {
return parseInt(n) < 10 ? '0' + n: '' + n;
};
}
}
問題は、date
プロパティでモデルの更新を発行すると、datepicker にバインドされたものが更新されないことです。つまり、それは初めてのことですが、それを投稿すると、テキストボックスの更新に失敗します。ただし、カレンダーは正常に表示されます。最終的には、関数のロジックを変更する必要がありapplyDate
ます...
JSBin: http://jsbin.com/rupaqolexa/1/edit?html,js,output
更新: 別の問題が発生しました... IE 10 以降では機能しません。日付NaN
はUIのように表示されます...
更新: 再現手順
- 日付 2 番目のテキスト ボックス: 2013/05/13 を入力し、[変更] ボタンをクリックします。日付ピッカーのテキストボックスで観察日が更新されます。これは期待どおりに機能します。(IE を除く)。
- テキストボックスに別の日付を入力し、変更ボタンをクリックします。datepicker テキストボックスで日付が更新されていないことを確認します。ここで、datepicker テキストボックスが最新の値で更新されることが期待されます。