淘汰赛狩猎验证错误

时间:2017-08-26 04:41:47

标签: javascript google-chrome knockout.js safari

我得到了淘汰赛的项目,但我没有淘汰出局。 我在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中我得到

1 - 0

2 - 0

在safari中我得到了

1 - 2

2 - 0

我尝试更改 ko.validation.group(this,{deep:true,live:true}) - 没有影响

有错误的字段是带有typeahead的文本输入。

为什么吗

我必须知道Safari / knockout和Chrome / knockout之间的哪些不同?

2 个答案:

答案 0 :(得分:1)

很难说你在这里尝试做什么,因为这段代码已脱离背景,但我会在黑暗中拍摄。

你的行中可能有“这个”......

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”设置为这些变量然后使用这些变量将保证您将引用您认为自己的那个。

我希望有所帮助! : - )

答案 1 :(得分:1)

我改变了

<input data-bind='value:origin'>

<input data-bind='textInput:origin'>