我有以下bindingHandlers:
ko.bindingHandlers.dateRW = {
init: function (element, valueAccessor, allBindings, viewModel, bindingContext) {
ko.utils.registerEventHandler(element, "change", function () {
var value = $(element).val();
var dateFormatted = moment.utc(value, "DD/MM/YYYY");
if (dateFormatted !== null && dateFormatted.isValid())
observable(dateFormatted.toDate());
else {
observable(null);
observable.notifySubscribers(null);
}
});
},
update: function (element, valueAccessor) {
var value = ko.utils.unwrapObservable(valueAccessor());
var date = (typeof value !== 'undefined') ? moment.utc(value) : null;
var dateFormatted = (date !== null) ? date.format('DD/MM/YYYY') : '';
$(element).val(dateFormatted);
}
};
在我看来:
<div data-bind="with: transport()"
<input type="text" data-bind="dateRW: startDate">
</div>
在初始化部分,您有element
,valueAccessor
,allBindings
,viewModel
,bindingContext
。
我不知道为什么,但viewModel
和bindingContext
未定义。
有什么想法吗?
感谢。
更新
我发现如果我在代码中注释一行:
ko.validation.makeBindingHandlerValidatable('dateRW');
然后我可以在我的init函数中访问viewModel
。这似乎是问题所在。此外, knockout.Validation 的当前版本是1.01,似乎与我需要的东西不兼容(viewModel额外属性)。
希望有人可以帮助我。
感谢。