在敲除自定义绑定中,您如何知道哪个值触发了更新?

拉比

B“高

我正在基于敲除js的旧项目上工作。我正在尝试创建一个用于select2的自定义绑定,但是我遇到了一堵砖墙,试图找出哪些属性(值)发生了变化。

即我怎么知道选项列表是否刚刚更改?还是所选值?

如果值列表刚刚更改,那么我需要重构select2,将控件值设置为null(否则默认情况下选择第一项)。如果用户只是在列表中选择了一个项目,那么我真的不想做任何事情。绝对不重建整个控件或将控件值设置为null。但是我找不到任何方法可以查看哪些值已更改。

看Shumeliuk

淘汰赛中的每个可观察对象都有订阅状态,因此如果您有

var myProp = ko.observable();

您可以订阅此道具的更改,并在那里做所有必要的事情:

myProp.subscribe(function(newValue){
  console.log("value of prop changed to " + newValue);
});

我们确实通过以下方式为jquery选择的插件实现了自定义选择绑定:

    ko.bindingHandlers.chosen =
    {
    init: function (element, valueAccessor, allBindings) {
        var values = valueAccessor(),
            $element = $(element);
        $element.chosen(ko.toJS(values));

        if (ko.isObservable(values.enable)) {
            values.enable.subscribe(function (value) {
                $element.prop('disabled', !value).trigger("chosen:updated");
            });
        }

        // trigger chosen:updated event when the bound value or options changes

        ['value', 'selectedOption', 'options'].forEach(function (e) {
            var bv = allBindings.get(e);
            if (ko.isObservable(bv))
                bv.subscribe(function () { $(element).trigger('chosen:updated'); });
        });

        var prop = allBindings.get('value');
        $element.off('change');
        $element.on('change', function (obj, event) {
            if (!event || !prop) {
                return;
            }
            if (typeof (prop()) == "number" && !isNaN(Number(event.selected))) {
                prop(Number(event.selected));
            } else {
                prop(event.selected);
            }
        });
    },
    update: function (element) {
        $(element).trigger('chosen:updated');
    }
};

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

您刚刚触发了<自定义意图名称>

敲除自定义绑定在更新前获取值

对象文字中的自定义敲除绑定

如何在敲除自定义绑定中设置基于字符串/命名的模板?

敲除自定义数字绑定

敲除自定义html绑定

使用基因敲除.js的自定义绑定处理程序中的显式设置值绑定处理程序

如何更新自定义绑定中的可观察对象?

如何让Angle知道自定义窗口事件已被触发并需要更新检查

我的敲除自定义绑定不是2向绑定

Postgres中是否有定义好的功能可以让您知道什么动作触发了触发器?

淘汰赛自定义绑定更新未触发

自定义元素双向绑定更新,不触发valueChange

在我的自定义视图中找不到哪个视图触发了点击手势识别器

敲除自定义绑定会导致双重事件?

重新映射敲除后未绑定自定义属性

敲除绑定,每个都带有自定义项

如何知道每个循环中车把中的哪个项目触发了Ember控制器中的功能?

如何更新自定义挂钩值

wordpress 自定义 - 如何更新值?

您如何在Java中更新此自定义绘画?

您如何过滤脱水期间创建的自定义值?

从敲除3.2中的自定义组件可观察到的更新

敲除js自定义绑定的初始化和更新功能有什么区别

自定义绑定不会触发?

自定义敲除组件

在Swift中,如何检测哪个UIControlEvents触发了该动作?

如何在 JQuery 中检查哪个控件触发了它

您如何自定义 JPanel 中 JPanel 的位置