2016-12-24 3 views
1

작업 배열을 다시 시도는 내가 Github에서에서 일하고 프로젝트입니다 :이 프로그램에서 https://github.com/joelt11753/Udacity-mapKnockout.JS 배열하지 그래서 여기

, 나는 목록에서 생성되는 메뉴가 있습니다. HTML 선택 요소를 사용하여이 메뉴를 필터링하고 있습니다. 기본적으로 모든 항목이 표시됩니다. 다른 옵션을 선택하면 메뉴가 변경됩니다. 현재 문제는 필터를 실행할 때마다 메뉴 목록을 재설정해야한다는 것입니다.

app.js 파일을 보면 js 폴더에 있습니다. 8 행에는 메뉴를 필터링하는 계산 된 관찰 가능 항목이 있습니다. 10 행에서 viewList()를 비워 둡니다. 비어 있어야 사용자 선택에 따라 새로 시작하고 필터링 할 수 있습니다. 그러나 10 행은 기본 옵션을 선택한 경우에만 작동합니다. 기본값은 11 행의 "if"입니다. 20 행은 필터링 된 메뉴를 표시하는 블록을 시작합니다. 21 행의 console.log에 올바른 번호가 표시되지만 재설정이 발생하지 않습니다. 기본적으로, 제 질문은, 왜 선택이 이루어질 때마다 리셋이 작동하지 않는가하는 것입니다. 앱을 사용하는 경우 기본값이 아닌 다른 옵션을 선택하면 메뉴가 비게됩니다. 하지만 그렇지 않습니다.

고마워요!

+0

다음과 같이 배열을 지울 수 있습니다. javascript arr = [1,2,3,4]; arr.splice (0) .. –

+0

멋지므로 효과가 있습니다. 그러나 왜 배열을 공백으로 설정하지 않는지는 = []; 일? – Coder

답변

0

배열을 재설정하는 방법부터 시작해 보겠습니다. 이

this.viewList = []; 

은 작동하지 않습니다. 왜? 처음에는 viewList이 무엇인지 생각해보십시오. ko.observableArray입니다. 그러나 일반 배열을 할당하므로 observableArray에서 제공하는 모든 기능이 손실됩니다. 당신이 viewList 다시이 식의 값을 할당하지

this.viewList.removeAll(); 

참고 :을 취소하는 올바른 방법이있다. removeAll은 새 컬렉션을 만드는 대신 컬렉션 자체를 변경하기 때문입니다. 또한 같은 객체에 영구적 인 참조를 선언 고려해

var ViewModel = function() { 
    var self = this; 
    ... 
} 

그것은 때문에 객체 this 포인트가 변경 될 수 있다는 사실 일반적인 것이 좋습니다. 그러나이 방법은 객체 생성시와 마찬가지로 객체의 스냅 샷을 생성하는 것입니다. 즉, 생성 된 객체 자체입니다. 질문으로 돌아가서 viewList.removeAll()을 사용하면 드롭 다운 목록 아래에 표시된 요소가 올바르게 변경됩니다. 표시 할 항목이 어디에서 왔는지 알 수 없기 때문에 (else ˙branch에만 console.log을 썼음)이 문제를 확인하고 문제가 남아있는 경우 질문을 업데이트하십시오.

1

당신은이 방법

var arr = [1,2,3,4]; 
arr.splice(); 

이 당신에게 하늘의 배열을 반환에서 할 수 있습니다.