在逐步向导中重置Knockout验证中的错误

时间:2014-10-20 11:16:01

标签: javascript validation knockout.js

我已经使用knockout和模板绑定创建了一步一步的向导,现在我想强制用户在转到下一页之前完成每一页,并且通过完成我的意思是Knockout验证必须是有效的。 当viewmodel上没有错误时启用下一个按钮,并且在单步执行向导时它可以正常工作,但是当您进入一个步骤并按下之前时会出现问题。错误保持"活着"即使你回去,所以第1页的下一个按钮被禁用,因为第2页无效。

我设置了一个小提琴:http://jsfiddle.net/1uo8rtw2/1/

  1. 在名称框中写下内容
  2. 按下一步
  3. 按上一步
  4. 现在您看到“下一步”按钮已被禁用。
  5. 假设问题出现在下面的代码中:

        self.errors = ko.validation.group(self.viewModel);
    
        self.PrevIsEnabled = ko.observable(false);
        self.NextIsEnabled = ko.computed(function() {
            return self.errors().length == 0 && self.SelectedTemplate() != "Age";
        });
    

    有什么方法可以在返回时重置错误计数并强制敲除验证以重新验证当前模板?

2 个答案:

答案 0 :(得分:0)

self.errors包含所有字段的错误。

您应该只检查当前模板字段的有效性:

self.NextIsEnabled = ko.computed(function() {
    var selectedTemplate = self.SelectedTemplate();
    return selectedTemplate != "Age" 
           && self.viewModel[selectedTemplate].isValid();
}

当然,如果模板中有多个字段,则应检查所有字段的有效性。

答案 1 :(得分:0)

我偶然发现this pull request at github, 所以我要做的就是订阅SelectedTemplate并致电

self.errors.clearAllErrors();

它有效。

我无法让我更新的JSFiddle工作,因为我无法实现新功能但是这里的全部是http://jsfiddle.net/1uo8rtw2/2/