2015-10-03 2 views
1

Я экспериментировал с Нокаут с машинопись и пытаюсь отправить модель представления, которая содержит другую модель в качестве параметров функции, как:Нокаут Отправка ViewModel в качестве параметра

Машинопись:

export interface IEmployee {...} 
export interface ICompany {...} 

export class ViewModel() { 
    constructor(company : ICompany) {} 
    public setAsOwner(parent : ViewModel, person : IEmployee) { 
     parent.company.updateOwner(person.id); 
    } 
} 

// In a different file 
ko.applyBindings(new ViewModel(new ICompany())); 

HTML:

<ul data-bind="foreach: employees"> 
    <li> 
     @*Employee details...*@ 
     <button data-bind="click: $root.setAsOwner.bind($parent, $data)"> 
      Set as new owner 
     </button> 
    </li> 
</ul> 

Однако я продолжаю ошибаться, говоря, что parent.company не определено. Каков правильный способ передачи модели представления в качестве параметра в свою собственную функцию?

ответ

0

click связывание функция обработчика автоматически получает текущий элемент сотрудника в качестве первого параметра, и, если вы звоните $parent.setAsOwner из функции обертки, вид модель родителя доступна для метода через this.

Таким образом изменить setAsOwner метод к:

public setAsOwner(person : IEmployee) { 
    this.company.updateOwner(person.id); 
} 

и HTML для:

<ul data-bind="foreach: employees"> 
    <li> 
     @*Employee details...*@ 
     <button data-bind="click: function(employee) { $parent.setAsOwner(employee); }"> 
      Set as new owner 
     </button> 
    </li> 
</ul> 
Смежные вопросы