Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Knockoutjs:Can';t包装';更新';在检查绑定时,如何在更新时运行js?_Javascript_Jquery_Knockout.js - Fatal编程技术网

Javascript Knockoutjs:Can';t包装';更新';在检查绑定时,如何在更新时运行js?

Javascript Knockoutjs:Can';t包装';更新';在检查绑定时,如何在更新时运行js?,javascript,jquery,knockout.js,Javascript,Jquery,Knockout.js,我正在使用KnockoutJS3.0,我正在尝试创建一个“checked”绑定的包装版本。我希望它只需在选中的值更改后执行$.scrollto()。我现在只是尝试包装绑定,没有任何其他行为: ko.bindingHandlers.checkedWithPostScroll = { init: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) { //Do ex

我正在使用KnockoutJS3.0,我正在尝试创建一个“checked”绑定的包装版本。我希望它只需在选中的值更改后执行
$.scrollto()
。我现在只是尝试包装绑定,没有任何其他行为:

ko.bindingHandlers.checkedWithPostScroll = {
    init: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
        //Do extra UI stuff here
        ko.bindingHandlers.checked.init(element, valueAccessor,allBindingsAccessor, viewModel, bindingContext);
    }
};
我开始包装“update”,但发现选中的绑定没有“update”,所以我改为包装“init”。但init中的代码只触发一次。如何重写此绑定,以便每次检查元素时,都会运行一些javascript

下面是一个JSFIDLE:

我希望在每次选中或取消选中某个元素时都显示警报框

问题的第二部分:有没有办法在绑定目标(特别是要滚动到的dom元素的id)上向绑定传递额外的一位信息?比如:


谢谢。。。 -本


-Ben

实现这一点的另一种方法是在您绑定的可观察(或可观察)上订阅更改通知。这就是我的结局:

self.selectedColors = ko.observableArray();

self.selectedColors.subscribe(function (changes) {

    if (changes[0].status === 'added' && self.selectedColors().length == 1)
        setTimeout(function () {
            $('html, body').animate({
                scrollTop: $("#NextSection").offset().top
            }, 1000);
        }, 200);


}, null, "arrayChange");

不使用自定义绑定,但可以工作。

请发布一个JSFIDLE。很抱歉造成混淆。我找到了与我原来的问题相对应的问题,并已将其清理干净。以上反映了这一点。
self.selectedColors = ko.observableArray();

self.selectedColors.subscribe(function (changes) {

    if (changes[0].status === 'added' && self.selectedColors().length == 1)
        setTimeout(function () {
            $('html, body').animate({
                scrollTop: $("#NextSection").offset().top
            }, 1000);
        }, 200);


}, null, "arrayChange");