【发布时间】:2012-10-27 23:17:27
【问题描述】:
我一直在使用 TypeScript 和 KnockoutJS 创建一个 htmlHelper 函数来编辑电子邮件列表。
电子邮件列表是一个名为 emails 的 Knockout ObservableArray,我对每个项目都有一个链接来删除它们。这是 HTML 片段:
<ul data-bind="foreach: emails" >
<li>
<a href="#" data-bind="click: $parent.deleteItem">Delete</a>
<span data-bind="text: $data"></span>
</li>
</ul>
删除链接绑定到$parent.deleteItem这是viewmodel中的一个方法:
// remove item
public deleteItem(emailToDelete: string) {
// remove item from list
this.emails.remove(emailToDelete);
}
在执行 deleteItem 方法之前,这一切都有效。调用此方法时的“this”是数组中的项,而不是视图模型。因此 this.emails 是一个空引用并且失败。
我知道 TypeScript 支持 Lambda 语法,但我找不到正确的编写方法(那里的例子很少)。
或者我可以采取其他方法吗?
【问题讨论】:
-
我没有使用过 TypeScript,但是在 Javascript 中通常的解决方案是将视图模型实例引用保存到一个变量,例如
var self = this,然后用它来引用emails对象,例如self.emails.remove(emailToDelete)。也许你知道 ts 语法可以做到这一点。
标签: lambda knockout.js typescript