如何在自定义绑定Knockout Js上调用ViewModel函数

时间:2013-11-17 19:11:30

标签: javascript jquery knockout.js jquery-validate

如何在自定义绑定中调用ViewModel函数?我有一个自定义绑定将jQuery Validate应用于表单,我需要在submitHandler中调用一个函数,但到目前为止我没有尝试过。有人能指出我正确的方向吗?我已经阅读了这些文档,但关于这个问题还不是很清楚。

这是我的自定义敲除绑定

// activate the jQuery Validate on the form
 ko.bindingHandlers.validateEmailForm = {
    update: function(element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {      
        $(element).validate({
            errorLabelContainer: $("#updateEmailFormAlert"),
            wrapper: 'li',
            rules: {
                email: {
                    required: {
                        depends: function(element) {
                            return $("#emailConfirm").is(":filled");
                        }
                    },
                    email: true
                },
                emailConfirm: {
                    required: {
                        depends: function(element) {
                            return $("#email").is(":filled");
                        }
                    },
                    email: true,
                    equalTo: "#email",
                }
            },
            messages: {
                email: {
                    required: "Email is required",
                    email: "Please enter a valid email address"
                },
                emailConfirm: {
                    required: "Confirm Email is required",
                    email: "Please enter a valid confirm email address",
                    equalTo: "Confirm Email must match Email"
                }
            },
            submitHandler: function() {

                bindingContext.$root.updateUserEmail;
                return false;
            }
        });
    }    
};

1 个答案:

答案 0 :(得分:0)

好吧,您可以从自定义绑定中轻松访问viewModel。当前上下文的viewModel在viewModel变量中传递,如果您需要访问其他任何内容,bindingContext可以访问所有父绑定上下文,直到$ root。

因此,如果您想从viewModel调用函数,只需执行viewModel.someFunction()

看来你已经在submitHandler中做了一些事情(bindingContext.$root.updateUserEmail)这不是你想要的吗?