2014-06-21 8 views
0

knockoutjs를 사용하여 선택 입력을 동적으로 생성하려고합니다.knockoutjs 값을 전달할 때 foreach를 사용하여 바인딩이 throw 됨 참조 오류

<div data-bind="with: QuestionFilter"> 
    <form> 
    <div> 
     <select data-bind="options: categories, optionsText: 'name', optionsValue: 'categoryID', value: selectedCategory"> 
     </select> 
    </div> 
    <div data-bind="foreach: details"> 
     <select data-bind="options: subcategories, optionsText: 'name', optionsValue: 'categoryID', value: selectedSubcategory"> 
     </select> 
    </div> 
    </form> 
</div> 
<script type="text/javascript"> 
    ko.applyBindings({ 
    categories = <?php echo json_encode($categories); ?>,   
    details = ko.observableArray([])  
    }); 
</script> 

을 그리고 내 JS는 다음과 같습니다 - -

내보기는 다음과 같습니다

function QuestionFilter(categories, details) { 
    var self = this; 
    self.categories = ko.observableArray(categories); 
    self.subcategories = ko.observableArray([]); 
    self.selectedCategory = ko.observable(); 
    self.selectedSubcategory = ko.observable(); 
    self.superSubcategories = ko.observableArray([]); 

    self.selectedCategory.subscribe(function(category) { 
    function search(nameKey, myArray){ 
     for (var i=0; i < myArray.length; i++) { 
     if (myArray[i].parentCategory_id === nameKey) { 
      self.subcategories.push(myArray[i]); 
     } 
     } 
    } 
    search(category, categories); 
    details.push({ firstName: self.subcategories()}); 
    }); 

    self.selectedSubcategory.subscribe(function(subcategory) { 
    function subsearch(nameKey, myArray){ 
     for (var i=0; i < myArray.length; i++) { 
     if (myArray[i].parentCategory_id === nameKey) { 
      self.superSubcategories.push(myArray[i]); 
    } 
     } 
    } 
    subsearch(subcategory, categories); 
    details.push({ firstName: self.superSubcategories()}); 
    }); 

그래서, 변수 selectedCategoryself.selectedCategory.subscribe에서 함수를 예상대로 수행하고 트리거합니다. 변수 selectedSubcategory이 예상대로 수행되지 않고 대신 다음 오류 - ReferenceError: selectedSubcategory is not defined이 발생합니다. 나는 with 바인딩 내부에 foreach 바인딩을 사용하는 것과 관련이 있다고 생각하지만 확실하지 않습니다. 다른 모든 것은 예상대로 작동하며,이 기능을 사용하여 여러 객체를 세부 배열에 성공적으로 추가했습니다.

어떤 생각이나 설명이 필요합니까?

+0

'ko.applyBindings' 호출이 유효한 구문과 같지 않습니다. –

+0

안녕하세요, Ismail, 여기가 잘 맞으므로 좀 잘랐습니다. 'selectedSubcategory.subscribe' 비트를 사용하는 것을 제외하고는 위 코드의 모든 것이 작동하기 때문에 작동한다는 것을 보증 할 수 있습니다. – Jimbob

답변

0

오른쪽 컨텍스트에서 selectedSubcategory에 액세스하지 않은 것처럼 보입니다. 앞에있는 $parents[0].은 원하는 결과를주었습니다. 그래서 $parents[0].selectedSubcategory처럼 보입니다. 이상하게도 $parents$parents[0]과 동일한 컨텍스트를 제공하지만이 경우에는 작동하지 않습니다 ...