Knockout - 自定义绑定 - 将变量从 init 传递到 update

问题描述 投票:0回答:2

我第一次使用knockout.js。

我有以下绑定:

ko.bindingHandlers.dateselect = {
    init: function (element) {

        var picker = new Pikaday({
            field: element,
        });

    },
    update: function (element) {

        var current = picker.getDate();

    }
};

init
方法中,我初始化日期选择器,并尝试在
update
方法中获取日期,如上所示。

问题是我收到以下错误:

未定义选择器

有什么方法可以访问

picker
方法内的
update
实例吗?

javascript knockout.js
2个回答
1
投票

您可以通过设置存储到元素中的助手来完成此操作。

例如

function SomeBindingHelper(element, valueAccessor, allBindings, viewModel, bindingContext) {
    var sharedVariable = "Banana";

    // Call on init.
    this.init = function () {
        console.log("init", sharedVariable);
    }

    // Call on update.
    this.update = function () {
        console.log("update", sharedVariable);
    }
}

ko.bindingHandlers.someBinding = {
    init: function (element, valueAccessor, allBindings, viewModel, bindingContext) {
       var bindingHelper = new SomeBindingHelper(element, valueAccessor, allBindings, viewModel, bindingContext);
       bindingHelper.init();
       ko.utils.domData.set(element, "someBindingHelper", bindingHelper);
    },
    update: function (element, valueAccessor, allBindings, viewModel, bindingContext) {
       var bindingHelper = ko.utils.domData.get(element, "someBindingHelper");
       bindingHelper.update();
    }
}

0
投票

当时的情况可能并非如此,但对于将来遇到此问题的任何人来说,我发现下面的代码是有效的。

ko.bindingHandlers.dateselect = {
    init: function (element) {
        this.sharedVar = true;
        var picker = new Pikaday({
            field: element,
        });
    },
    update: function (element) {
        console.log("sharedvar", this.sharedVar); 
        var current = picker.getDate();

    }
};
© www.soinside.com 2019 - 2024. All rights reserved.