我得到了 knockout 的项目,但我没有 knockout 的经验。 我在 safari/ios 中遇到奇怪的错误(windows chrome 和 android chrome - 一切正常)
origin: ko.observable().extend({
required: {
message: "Origin is required."
}
}),
var errors = ko.validation.group(this);
var lineErrors = ko.validation.group(this.lines, {
deep: true,
live: true
});
console.log(1, errors().length);
console.log(2, lineErrors().length);
在 chrome 中我得到 p>
1 - 0
2 - 0
在 safari 中我得到
1 - 2
2 - 0
我尝试更改 ko.validation.group(this, { deep: true, live: true }) - 没有影响
错误的字段是提前输入的文本。
为什么?
我必须知道 Safari/knockout 和 Chrome/knockout 之间的哪些区别?
最佳答案
因为这段代码是断章取义的,所以很难说出你在这里试图做什么,但我会在黑暗中试一试。
您的行中的“this”可能...
var errors = ko.validation.group(this);
...在 Chrome 中的解释与在 Safari 中的解释不同。 Chrome 可能认为它指的是一个对象,而 Safari 则认为它是另一个对象。
Javascript 中的“this”关键字非常棘手,应谨慎使用。确保您指的是您想要指的确切事物的一种常见做法是将“this”分配给其他一些范围内的变量,然后您可以完全自信地引用您所指的事物你是。如果您使用闭包或函数内的其他函数,这一点尤其重要。 例如……
var someOuterFunction = function() {
var outerFunction = this;
var someInnerFunction = function() {
var innerFunction = this;
var doSomeWorkWithTheOuterAndInnerFunctions(outerFn, innerFn) {
//Perform some sort of work with your functions
}
//Call a function that performs some sort of work with your nested functions
doSomeWorkWithTheOuterAndInnerFunctions(outerFunction, innerFunction);
}
}
创建和使用 outerFunction 和 innerFunction 变量是关键。将您的“this”显式设置为这些变量,然后改用这些变量将保证您将引用您认为的东西。
希望对您有所帮助! :-)
关于javascript - Knockout Safari 验证错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45891995/