2016-11-08 8 views
0

Here은 내가 작업하고있는 코드입니다. 나는 이렇게 보이는 VM을 정의했다.

var employee = function(fname,lname){ 
    var self= this; 
    self.fname = ko.observable(fname); 
    self.lname = ko.observable(lname); 
    self.selectedElement = ko.observable('Default Value'); 
    } 

    var vm = function(){ 
     var self = this; 
     self.employees = new ko.observableArray([]); 
     self.selectedElement = ko.observable(-1); 

     var e1 = new employee('f1','l1'); 
     var e2 = new employee('f2','l2'); 
     self.employees.push(e1); 
     self.employees.push(e2); 
    }; 

    ko.applyBindings(vm,container); 

그리고 내 코드는 직원의 목록이 그 아가씨 ' employee'메인 뷰 모델 ' vm'모두 동일한 속성을 임명했다 ( selectedElement)

이제 내부

<body id="container"> 
<h1>Empoyees</h1> 
<div> 
    <div data-bind="foreach: employees"> 
    <h4 data-bind="text: 'Employee' + $index()"></h4> 
    <span>First Name :</span> 
    <span data-bind="text: fname"></span> 
    <br/> 

    <span>Last Name :</span> 
    <span data-bind="text: fname"></span> 
    <br/> 

    <span data-bind="text: selectedElement()"></span> 
    <!-- I want to access parents 'selectedElement' i.e. vm.slectedElement() --> 
    <!--I tried below code but its causing binding error.--> 
    <!-- <span data-bind="text: $parent.selectedElement()"></span> --> 
    <br/> 
    </div> 
</div> 

주입니다 표시 foreach 바인딩 'selectedElement'root/parent 컨텍스트의 속성에 액세스하려고 시도하고 있지만 foreach ko가 'employee'클래스의 'selectedElement'속성에 액세스하고 있기 때문에.

$root$parent 키워드를 사용하여 부모 요소 속성에 도달했지만 바인딩 오류가 발생했습니다.

나는 무엇이 있습니까? Here은 다시 엄청난 링크입니다.

답변

3

루트보기 모델의 인스턴스를 만들지 않았습니다. 예상대로

ko.applyBindings(new vm(),container); 

https://plnkr.co/edit/wRKfnJi9Jl9Rj2unbgQp?p=preview

당신이 그렇게 어느 $root 또는 $parent에 초기 호출을 변경 작동합니다.

+0

빠른 답변을 위해 @Jamiec에게 감사드립니다. 하지만 여전히 ($ root/$ parent를 제외하고) 다른 모든 것들이 내 뷰 모델의 객체를 인스턴스화하지 않고 작업 한 이유에 대해 머리를 긁적입니다. 나는 기초를 모른다. 이것 좀 비켜 주시겠습니까? – user2243747

+1

@ user2243747 knockout은 뷰 모델로서 직선 함수를 받아 들일 것이지만, 아마도'this'는 그렇게 할 때 윈도우 객체를 참조 할 것입니다. 런타임의 뷰 모델 계층을 혼란스럽게 만들 것이므로'$ root'와'$ parent' 같은 것들은 아마도 잘못된 장소를 가리킬 것입니다. – Jamiec