0

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

我在用着:

  • 淘汰赛3.3
  • jQuery 2.1.4
  • 裁剪器 2.0

这是绑定处理程序:

    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 中)时 除了 allBindings 之外,没有定义 init 中的任何参数。不过,我已经看到几个使用这种通用模式的示例(例如这里)。我究竟做错了什么?

4

2 回答 2

1

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

于 2015-11-12T21:14:06.957 回答
0

这要么是 Chrome 调试工具的问题,要么是淘汰赛的“功能”。

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

在当前上下文中使用变量之前,它们似乎没有被初始化。

于 2015-11-12T18:11:10.610 回答