Here - это код плункера, над которым я работаю. Я определил виртуальную машину, которая выглядит так.
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 binding Я пытаюсь получить доступ к свойству «selectedElement
» корневого/родительского контекста, но поскольку я внутри foreach, ko обращается к свойству «selectedElement» класса «employee».
Я попытался использовать $root
и $parent
ключевые слова, чтобы получить свойство родительского элемента, но вызывает ошибку привязки.
Я ничего не пропустил? Here - ссылка на плункер.
Спасибо @Jamiec за быстрый ответ. Но все же я почесываю голову, потому что все остальное (кроме $ root/$ parent) работало без экземпляра объекта моей модели представления. Может быть, я не знаю основ. Не могли бы вы рассказать об этом? – user2243747
@ user2243747 нокаут будет принимать прямую функцию в качестве модели представления, но, вероятно, «это» относится к объекту окна, когда вы это делаете. Это смущает иерархию моделей представления времени выполнения, поэтому такие вещи, как '$ root' и' $ parent', вероятно, указывают на неправильное место. – Jamiec