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