0
Here是我正在研究的一個plunker代碼。我已經定義了一個看起來像這樣的虛擬機。
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);
而我的代碼,以顯示員工的名單
<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>
注意的姑娘「employee
」和主視圖模式「vm
」既有相同的屬性命名(selectedElement
)
現在裏面foreach綁定我試圖訪問根/父上下文的'selectedElement
'屬性,但因爲我在foreach中,因此ko正在訪問'employee'類的'selectedElement'屬性。
我嘗試使用$root
和$parent
關鍵字來達到父元素屬性,但它導致綁定錯誤。
我錯過了什麼? Here再次是plunker鏈接。
感謝@Jamiec作出快速響應。但是,我還在摸索爲什麼其他所有東西(除了$ root/$ parent)都沒有實例化我的視圖模型的對象。可能是我不知道的基礎知識。你能把這個問題點亮嗎? – user2243747
@ user2243747 knockout將接受一個直觀的函數作爲視圖模型,但當你這樣做時,可能'this'指的是窗口對象。它會混淆視圖模型的運行時層次結構,所以'$ root'和'$ parent'可能指向錯誤的地方。 – Jamiec