代码:
export class ViewModel {
public users: knockout.koObservableArrayBase;
constructor () {
this.users = ko.observableArray([]);
this.removeUser = this.removeUser.bind(this);//<-- Here compiller shows error
}
removeUser(user: User): void {
this.users.remove(user);
}
}
html:
<table>
<thead>
<tr>
<th>Name</th>
<th>Surname</th>
</tr>
</thead>
<tbody data-bind="foreach: users">
<tr>
<td><a href="#" data-bind="click: $root.removeUser">Remove</a></td>
<td data-bind="text: name"></td>
<td data-bind="text: surname"></td>
</tr>
</tbody>
</table>
问题出在 removeUser 方法中。默认情况下,如果我不绑定上下文,则 this == UserToDelete - 不是 viewModel 对象。如果我添加到构造函数:this.removeUser = this.removeUser.bind(this); (manually enforce context)
,那么上下文是需要的 this == viewmodel,但是 TypeScript 抱怨“无法将函数转换为 (user:User)=>void 需要调用签名,但函数缺少调用签名。”