【发布时间】:2017-03-28 09:11:43
【问题描述】:
我目前维护的一个站点使用 bootstrap (v3.1.1) 和 Ace Admin 主题 (http://ace.jeka.by/),似乎不再积极维护。
我也在使用 Knockout,并且很难在表单上获取日期选择器以尊重我希望它使用的格式。这里有很多关于让 Knockout 与 BS 日期选择器完美配合的问题。
有问题的日期选择器是 eyecon 的,而不是 eternicode 的。由于前者深深嵌入 Ace Admin 主题中,因此将其换掉看起来并不简单。 HTML5 日期输入没有得到足够广泛的支持,我无法使用它。
幸运的是,我几乎可以使用它,除了日期选择器不遵守我告诉它使用的格式这一事实。
我使用 KO 绑定如下:
JS:
ko.bindingHandlers.datepicker = {
init: function(element, valueAccessor, allBindingsAccessor, viewModel) {
// Register change callbacks to update the model if the control changes.
ko.utils.registerEventHandler(element,
"change",
function() {
var value = valueAccessor();
value(moment(element.value).format("DD/MM/YYYY"));
});
},
// Update the control whenever the view model changes
update: function(element, valueAccessor, allBindingsAccessor, viewModel) {
var value = valueAccessor();
element.value = moment(value()).format("DD/MM/YYYY");
}
};
HTML:
<input class="datepicker form-control" data-bind="datepicker: BirthDetails().DateOfBirth, value: BirthDetails().DateOfBirth, dateFormat: 'dd/mm/yyyy'" data-date-format="dd/mm/yyyy" id="dateOfBirth" name="dateOfBirth" placeholder="dd/mm/yyyy" type="text" />
【问题讨论】:
-
我不确定它在这里会有多大用处,但你知道knockstrap吗?它旨在弥合淘汰赛和引导式之间的差距 - 在某些情况下非常有用。
-
在访问
valueAccessor之前尝试ko.unwrapObservable... 是的,knockstrap 是一个值得一看的库... -
@gkb 您对使用 unwrapObservable 的建议会导致 KO 出现以下内容: ex.message = "Unable to process binding \"" + bindingKey + ": " + bindings[bindingKey] + "\ "\n消息:" + ex.message;
-
@noonand - 你有小提琴要看看吗?
-
这就是为什么我说“我不确定它在这里会有多大用处” - 但将来如果你同时使用两者可能会。
标签: javascript twitter-bootstrap knockout.js datepicker