【发布时间】:2012-03-22 07:10:58
【问题描述】:
我有一个页面上的附件列表,它是使用 jQuery $.ajax 调用和 Knockout JS 生成的。
我的 HTML 看起来像(这被剥离了):
<tbody data-bind="foreach: attachments">
<tr>
<td data-bind="text: Filename" />
</tr>
</tbody>
我有一个函数可以获取作为 JSON 响应返回的附件列表:
$(function () {
getFormAttachments();
});
function getAttachments() {
var request = $.ajax({
type: "GET",
datatype: "json",
url: "/Attachment/GetAttachments"
});
request.done(function (response) {
ko.applyBindings(new vm(response));
});
}
我的视图模型如下所示:
function vm(response) {
this.attachments = ko.observableArray(response);
};
有一个刷新按钮,用户可以单击以刷新此列表,因为随着时间的推移,附件可能已被添加/删除:
$(function () {
$("#refresh").on("click", getAttachments);
});
附件列表的初始渲染很好,但是当我通过刷新按钮再次调用getAttachments 时,单击列表被添加到(实际上每个项目都重复了多次)。
我在这里创建了一个 jsFiddle 来演示这个问题:
我做错了什么?
【问题讨论】:
-
Kev - 好帖子。我仍然对此感到有些困惑。新的淘汰赛。我只是在页面加载时加载带有 AJAX 数据的 ViewModel 时遇到了类似的问题。我确定我错过了一个微小但严重的问题。让我感到困惑的一件事是一些教程将
viewmodel显示为一个对象(例如var viewmodel = { something: ko.observable() }),而另一些则显示为一个函数(例如function ViewModel() { this.something = ko.observable() }) - 有什么建议吗? -
@one.beat.consumer - 请参阅我的后续问题:stackoverflow.com/questions/9589419/… - 答案和下面的 cmets 应该让事情更清楚。我建议花 25 美元看这个:pluralsight-training.net/microsoft/Courses/…
-
我会看看你的另一个问题;谢谢。我订阅了复数视力,我已经看了 2-3 次......他们几乎没有触及表面,而且现在 2.0 已经发布,其中大部分内容已经过时,他们使用的是 1.2 或 1.3 测试版......