2014-05-20 3 views
0

I는 2 차원 관찰 어레이라는 텍스트 필드 가지고녹아웃 JS : 인자로 관찰 배열을 전달

var t1 = ko.observableArray([{val: 0}, {val:0}]) 
self.textFields = ko.observableArray([t1]); 

그리고 I가 그 해결라는 함수 인수 취하도록되어있다 :

self.solve = function(arr){ 
console.log(arr); 
} 

하여 내 HTML, 해결할 인수로 textFields를 전달하는 링크 클릭과 해당 함수를 연결했습니다.

<a id='solveBtn' href='#' data-bind='click: solve(textFields)'>Solve</a> 

나는 이제 textFields 배열을 인쇄 해 보았습니다. 그러나 대신, 나는 []를 얻는다. Chrome에서 디버거의 변수를 보면 []도 보입니다. 왜 그런가요? 왜 TextField가 제대로 전달되지 않아 해결되지 않습니까?

편집 :

self.solve = function(arr){ 
console.log(arr()); 
} 

를하지만이 (가) '정상'배열을하도록되어 다른 기능이 관찰 배열을 (전달하려는 알고

내가 JS 지금과 같이 만들어 그것을 :

var normalize = function(arr){ 
    var retArr = []; 
    console.log(arr().length); 
    for(var i = 0; i < arr.length; i++){ 
     var temp = []; 
     for(var j = 0; j < arr()[i]().length; j++){ 
      temp.push(arr()[i]()[j].val); 
     } 
     console.log(temp); 
     retArr.push(temp); 
    } 
    return retArr; 
} 

을 console.log (편곡은()) 나에게 다음과 같은 오류를 제공합니다 : 메시지 : 객체가 함수가 아닙니다 나는 정상적인 배열로 편곡 취급 할 때,에 대한 루프가 실행되지 않습니다.. 나는 arr [i]의 길이는 0입니다.

답장을 보내 주셔서 감사합니다.

토니

답변

1

당신의 배열 값이 방법을

<a id='solveBtn' data-bind='click: function(){solve(textFields())}'>Solve</a> 

를 해결하거나

self.solve = function(arr){ 
     console.log(arr()); 
} 

빠른 메모를 다음과 같이 스크립트를 수정 얻기 위해 마크 업이 일을보십시오 : 샘플 마크 업에서, 매개 변수가있는 함수를 click 이벤트에 설정하고 있습니다. 이렇게하면 페이지가로드되는 동안 함수가 실행됩니다. 다음과 같이 함수 블록으로 래핑하는 것은 항상 안전합니다.

<a id='solveBtn' data-bind='click: function(){solve(textFields)}'>Solve</a> 
+0

답장을 보내 주셔서 감사합니다. 두 번째 제안을 시도했는데 이제는 [function, function]처럼 보이는 콘솔 출력을 제공합니다. 디버거에서이 객체를 자세히 살펴볼 때 매우 복잡해 보입니다. 그러나 그것은 녹아웃 때문일 수 있습니다. 더 중요한 문제는 다음으로 arr을 다른 함수에 전달하려고합니다. 그건 작동하지 않습니다. 내가 의미하는 바를 분명히하기 위해 질문을 편집했다. – tomet

+0

죄송합니다, 콘솔에서 출력을 확인할 때 어떤 부분이 혼란 스럽는지 모르겠습니다. 다음 코드는 solve 메소드에서 결과를 인쇄하고 배열을 다른 메소드로 전달하여 결과를 인쇄합니다. self.solve = function (arr) { for (var i = 0; i

+0

왜 arr.length를 사용할 수 있지만 arr(). length를 사용할 수없는 반면 arrParam.length는 사용할 수 있습니까? 전달 된 객체가 원래 객체와 동일하지 않습니까? – tomet

관련 문제