我有以下绑定处理程序:
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');
然后我可以访问viewModel
我的 init 函数。这似乎是问题所在。此外,当前版本的knockout.Validation是 1.01,似乎与我需要的不兼容(viewModel 额外属性)。
希望有人可以帮助我。
谢谢。