在使用 registerEventHandler 注册的事件中的自定义绑定中,似乎无法访问除 allBindings 之外的任何参数

Can’t seem to access any parameters except allBindings in custom binding within event registered with registerEventHandler

我有一个将功能包装到图像裁剪库的淘汰赛自定义绑定 (https://github.com/fengyuanchen/cropper。) 我正在捕捉 cropend.cropper 事件以(最终)将裁剪后的输出附加到一个可观察对象。

我正在使用:

这是绑定处理程序:

    ko.bindingHandlers.cropper = {
        init: function (element, valueAccessor, allBindings, viewModel, bindingContext) {
            var $element = $(element);
            var value = ko.unwrap(valueAccessor());
            var a = 1;
            ko.utils.registerEventHandler(element, "cropend.cropper", function (event) {
                var previewOutputObservable = allBindings.get('previewOutput');
                var valueAccessorFromAllBindings = allBindings.get('cropper');
                var b = 1;
            });
            $element.cropper(value);
        },
        update: function(element, valueAccessor, allBindings, viewModel, bindingContext) {
            var $element = $(element);
            var value = ko.unwrap(valueAccessor());
            var c = 1;
        }
    };

这是我要绑定的元素:

<img class="img-responsive" data-bind="attr: {'src': sampleObservable}, cropper: { aspectRatio: 16/9 }, previewOutput: cropPreview "/>

当我在 var b = 1 上设置断点(在 chrome 中)时; none init 中的参数除 allBindings 外均已定义。不过,我已经看到几个例子使用了这种通用模式(例如 here)。我做错了什么?

这要么是 Chrome 调试工具的问题,要么是 'feature' 的敲除。

var b = 1 之前,我添加了行 var newValue = element。我在该行上放置了一个断点,然后发现元素参数现在有了值。

变量似乎只有在当前上下文中使用后才会被初始化。

外部变量可通过闭包上下文访问。 Chrome 尝试通过仅包含闭包代码中实际访问的变量来优化上下文。由于 element 未在您的代码中访问,因此它不是上下文的一部分。这是一个很好的特性,因为它意味着可以安全地处理未在任何闭包中使用的变量。