窗口.knockoutjs视图模型中的位置不起作用

window.location inside knockoutjs viewmodel not working

本文关键字:位置 不起作用 模型 knockoutjs 视图 窗口      更新时间:2023-09-26

我有以下内容:

<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来处理点击事件,那么事情就会正常工作。

<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名称后运行

您确定在文档对象中定义了Id吗?/ViewDocument/undefined似乎表明data.Id.ToString()正在向undefined分解。

我在这里放了一个小提琴,当我在文档对象中定义Id时,它似乎工作得很好:

http://jsfiddle.net/jtbowden/gf9QT/

由于明显的原因,我注释掉了window.location行,但我可以在我的调试控制台中清楚地看到它正在尝试访问正确的URL。

我不知道这是不是一个打字错误,但它是"toString()"而不是"toString "

var url = path.replace("/0","/" + data.Id.ToString());
应该

var url = path.replace("/0","/" + data.Id.toString());

事实证明,我在documentList元素上还有另外两个单击绑定(与其他子元素绑定)。然而,这些都是在窗户前发射的。位置生效。那么,根据时间窗口。