删除验证在加载数据时停止计数错误
Knockout validation stops counting errors when data loaded
我正在工作的形式,我使用淘汰赛+淘汰赛。验证框架。现在我被验证卡住了,因为它没有像预期的那样工作。我创建了一个简单的小提琴来告诉你我的问题。
我的viewModel是一个复杂的对象,具有可观察字段和.extend方法。验证本身工作得很好,但错误计数却不行。
在排序,如果我分配数据给我的viewModel开始像这样:
self.someObject = ko.observable(new SomeObject({
id: "123",
name: {
en: "Initial data"
}
}));
一切正常,但是对实际数据的调用是对WebApi的一个nyc调用。因此,原始对象(viewModel.someObject)在从服务器返回时被替换。问题是,一旦对象被替换,viewModel。Errors(这是验证组)停止对错误的跟踪。
您可以在JsFiddle示例中看到完整的工作示例。也许我忽略了JS中一些重要的东西(我更喜欢c#)。
这是一个大问题,因为现在我无法停止保存数据,因为我不知道是否有任何错误。
谢谢!
错误计数不按预期工作的问题在于您自己。callForData函数。
通过self.someObject(new SomeObject({
id: "123",
name: {
en: "LoadedName"
}
}));
你实际上是用一个'新'对象实例替换了someObject可观察对象,因此旧的对象验证变得不被引用。
你需要一种方法来重置当前的'someObject'与新的数据值。我已经更新了小提琴,向您展示了一种方法,如何做到这一点。基本上你在你的对象中引入一个'reset'类型的函数,它重置对象的当前状态而不创建新的实例。例如:https://jsfiddle.net/newuserjs/ww2r6wet/
所以我终于找到了一个解决方案。现在看起来很容易…
@Dandy指出,当对象从ajax调用返回时,对象将被替换。这是因为ajax调用是异步的。
所以,如果你是在相同的情况下,我,你只是想做一些对象的初始加载(读取数据只一次每页加载),这是一个解决方案:你只需要确保你有javascript对象的数据之前,你调用ko。applyBindings ko。验证分组和对象构造函数,包含ko.observables。为此,您可以使用jQuery.when(..).done(..)。正如我所发现的,"done"方法中的代码将在"when"方法中的所有异步调用完成后被调用。
我想你现在已经明白我的意思了。在"when"方法中获取对象并将其保存到js变量中。在"done"方法中,从它构造新对象并调用ko。可观察的等等。applyBindings和验证分组。我创建了一个简单的代码示例,请查看。var user;
var viewModel;
// The User model with constructor
function User(data) {
var self = this;
self.username = ko.observable(data.username);
self.address = ko.observable(data.address);
// .. other properties
}
// UserViewModel object with constructor
function UserViewModel() {
var self = this;
// Make the User object from
self.User = ko.observable(new User(user));
// have some other help properties here in view model
// self.tasks = ko.computed(..); // etc..
}
// The magic
$.when(
$.getJSON("yourUrl",
null,
function(data) {
user = new User(data);
})
).done(function () {
// This code block will run after the async getJSON finishes
viewModel = new UserViewModel();
viewModel.errors = ko.validation.group(viewModel, { deep: true });
// Activates knockout.js
ko.applyBindings(viewModel);
});
- 为什么jasmine期望不验证是否抛出了错误
- jQuery在输入下验证post错误消息
- JavaScript表单验证-“;“错误”;不按需要工作
- 当与Dojo验证一起使用时,Chrome 41密码保存会做出错误的选择
- jquery表单验证复选框错误显示
- 页面上的2个表单带有JS验证-其中一个抛出电子邮件验证错误
- 在页面对象文件中验证sendKeys结果会导致未定义的错误(Protractor)
- 表单值未在单击按钮时发布,显示验证错误
- 表单已发送,但验证有错误
- TinyMCE验证给出错误:无法调用方法'getContent'的未定义
- Javascript表单验证-jsFiddle错误
- 无法使用JavaScript打印带有for循环的验证错误
- 为什么我的 JavaScript 会导致 HTML 验证错误
- 错误验证在AngularJS中不起作用
- 在线错误验证
- 接收package.json的解析错误.验证为有效的json
- 错误验证 W3C HTML5 img noscript facebook.com.
- 使用jquery输入文件类型错误验证不工作
- 带有警报的表单错误验证
- Angularjs用ng-href对dropdown/select redirect进行错误验证