我有以下内容:
HTML
<div id="documentsList" data-bind="foreach: documents">
<span class="ui-icon ui-icon-document" data-bind="click: $root.onViewDocumentClick"></span>
</div>
JAVASCRIPT
documentViewModel = new function() {
var self = this;
self.documents = ko.observableArray([]); //Loaded elsewhere
self.onViewDocumentClick = function(data) {
var path = "/ViewDocument/0";
var url = path.replace("/0","/" + data.Id.ToString());
window.location = url;
}
}
$(function() {
$ko.applyBindings(documentViewModel,$("#documentsList")[0]);
});
我的问题是,一旦加载了文档并单击图标,页面就会重新加载,但它表明页面实际上正在尝试重新加载 /ViewDocument/undefined ...这当然会引发错误,因为页面没有存在。
如果我进行以下更改以通过 jQuery 而不是 Knockout 处理单击事件,那么一切正常。
HTML
<span class="ui-icon ui-icon-document" data-bind="text: Id"></span>
JAVASCRIPT
$("#documentsList").on("click","span.ui-icon-document",function() {
var path = "/ViewDocument/0";
var url = path.replace("/0","/" + $(this).text());
window.location = url;
});
我错过了什么?
编辑 这是一个演示我的问题的小提琴:小提琴示例 如果您将 div 的名称更改为 documentList2,您将看到正确的行为。如果您将其保留为 documentList,您将看到错误。请务必在更改 div 名称后运行