【问题标题】:KnockoutJS Validation - nested ViewModel as validatedobservableKnockoutJS Validation - 嵌套的 ViewModel 作为validatedobservable
【发布时间】:2023-03-29 10:08:01
【问题描述】:

我有一个 KnockoutJS 视图模型,它充当多个模块化视图模型的“主”视图模型。这些模块化虚拟机利用淘汰赛验证的属性进行自己的表单验证。我想在主视图模型中创建这些视图模型validatedObservable,所以我可以简单地检查每个isValid 是否为真:

function MasterViewModel() {
    var self = this;

    self.addUserViewModel = ko.validatedObservable(new AddUserViewModel());
}

function AddUserViewModel() {
    var self = this;
    self.username = ko.observable().extend({ required: true });

    self.addUser = = function () {
        if(self.isValid()) {
            // Perform add user logic here
        }
    }.bind(self);
}

但是,当我尝试调用子视图模型时,isValid 方法不存在。添加作为函数的 validatedObservable 属性是否存在问题?

【问题讨论】:

    标签: knockout.js knockout-validation


    【解决方案1】:

    isValid 是由函数validatedObservable 添加的,因此只能在MasterViewModel 中使用。

    当您想检查模型在模型本身内部是否有效时,您可以使用ko.validation.group

    function AddUserViewModel() {
        var self = this;
        self.username = ko.observable().extend({ required: true });
    
        var errors = ko.validation.group(self, { deep: true });
        self.addUser = = function () {
            if (!errors().length) {
                // Perform add user logic here
            }
        };
    }
    

    【讨论】:

    • 这个答案完全满足我的要求,谢谢@sroes。应该注意的是,对于尝试此操作的其他人,errors 变量需要在声明视图模型的所有扩展可观察对象之后声明。
    猜你喜欢
    • 2013-09-02
    • 2017-06-06
    • 2019-10-14
    • 2011-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-24
    • 2016-05-22
    相关资源
    最近更新 更多