1

我有以下绑定处理程序:

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.

我不知道为什么,但是viewModelbindingContext未定义。

任何想法?

谢谢。


更新

我发现如果我在代码中注释一行:

ko.validation.makeBindingHandlerValidatable('dateRW');

然后我可以访问viewModel我的 init 函数。这似乎是问题所在。此外,当前版本的knockout.Validation是 1.01,似乎与我需要的不兼容(viewModel 额外属性)。

希望有人可以帮助我。

谢谢。

4

0 回答 0