【发布时间】:2015-11-19 07:29:26
【问题描述】:
我试图用 metro.js 日期选择器和淘汰赛来破解我的方式。到目前为止,我的 datepicker 绑定代码如下所示:
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 属性上发布模型更新时,它绑定到日期选择器不会更新。我的意思是,它是第一次这样做,但发布后,它无法更新文本框;日历显示还可以。最终我需要更改applyDate函数中的逻辑...
JSBin:http://jsbin.com/rupaqolexa/1/edit?html,js,output
更新:刚刚出现另一个问题...它在 IE 10+ 中不起作用。日期在 UI 中显示为 NaN...
更新:复制步骤
- 输入日期第二个文本框:2013/05/13 并单击更改按钮。观察日期在日期选择器文本框中更新。这按预期工作。 (IE 除外)。
- 在文本框中输入另一个日期并单击更改按钮。观察日期选择器文本框中的日期未更新。这里预计日期选择器文本框会更新为最新值。
【问题讨论】:
-
请尝试用其他词语解释问题。不幸的是,即使使用有效的 jsbin 示例也无法理解该问题。顺便说一句,您应该开始使用 SO 代码 sn-ps:blog.stackoverflow.com/2014/09/…
-
@JotaBe 更新后的复制步骤
标签: javascript knockout.js datepicker ko-custom-binding metro.js