在使用 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 事件以(最终)将裁剪后的输出附加到一个可观察对象。
我正在使用:
- 淘汰赛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 中)时; none init 中的参数除 allBindings 外均已定义。不过,我已经看到几个例子使用了这种通用模式(例如 here)。我做错了什么?
这要么是 Chrome 调试工具的问题,要么是 'feature' 的敲除。
在 var b = 1
之前,我添加了行 var newValue = element
。我在该行上放置了一个断点,然后发现元素参数现在有了值。
变量似乎只有在当前上下文中使用后才会被初始化。
外部变量可通过闭包上下文访问。 Chrome 尝试通过仅包含闭包代码中实际访问的变量来优化上下文。由于 element
未在您的代码中访问,因此它不是上下文的一部分。这是一个很好的特性,因为它意味着可以安全地处理未在任何闭包中使用的变量。
我有一个将功能包装到图像裁剪库的淘汰赛自定义绑定 (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 中)时; none init 中的参数除 allBindings 外均已定义。不过,我已经看到几个例子使用了这种通用模式(例如 here)。我做错了什么?
这要么是 Chrome 调试工具的问题,要么是 'feature' 的敲除。
在 var b = 1
之前,我添加了行 var newValue = element
。我在该行上放置了一个断点,然后发现元素参数现在有了值。
变量似乎只有在当前上下文中使用后才会被初始化。
外部变量可通过闭包上下文访问。 Chrome 尝试通过仅包含闭包代码中实际访问的变量来优化上下文。由于 element
未在您的代码中访问,因此它不是上下文的一部分。这是一个很好的特性,因为它意味着可以安全地处理未在任何闭包中使用的变量。