2017-08-26 66 views
1

我得到了淘汰賽的項目,但我沒有與淘汰賽的expirience。 我得到奇怪的錯誤在Safari/IOS(Windows上的Chrome和Android瀏覽器 - 一切ok)淘汰賽狩獵驗證錯誤

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(這一點,{深:真的,住:真}) - 無影響

場的錯誤是帶鍵入的文本輸入。

爲什麼?

Safari/knockout和Chrome/knockout之間我必須知道哪些不同?

回答

1

我改變

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

<input data-bind='textInput:origin'> 
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」設置爲這些變量,然後使用這些變量可以保證您將引用您認爲自己的東西。

我希望有幫助! :-)