Javascript window.location在knockoutjs viewmodel中不工作

Javascript window.location在knockoutjs viewmodel中不工作,javascript,jquery,knockout.js,Javascript,Jquery,Knockout.js,我有以下资料: HTML <div id="documentsList" data-bind="foreach: documents"> <span class="ui-icon ui-icon-document" data-bind="click: $root.onViewDocumentClick"></span> </div> <span class="ui-icon ui-icon-document" data-bind="t

我有以下资料:

HTML

<div id="documentsList" data-bind="foreach: documents">
   <span class="ui-icon ui-icon-document" data-bind="click: $root.onViewDocumentClick"></span>
</div>
<span class="ui-icon ui-icon-document" data-bind="text: Id"></span>
我的问题是,一旦加载文档并单击图标,页面就会重新加载,但它表明页面实际上正在尝试重新加载/ViewDocument/undefined ... 这当然会引发错误,因为页面不存在

如果我通过jQuery而不是Knockout对click事件进行以下更改,那么一切都正常

HTML

<div id="documentsList" data-bind="foreach: documents">
   <span class="ui-icon ui-icon-document" data-bind="click: $root.onViewDocumentClick"></span>
</div>
<span class="ui-icon ui-icon-document" data-bind="text: Id"></span>
我错过了什么

编辑 这里有一把小提琴来演示我的问题:
如果将div的名称更改为documentList2,您将看到正确的行为。如果您将其保留在documentList中,您将看到错误确保在更改div名称后运行

是否确实在文档对象中定义了
Id
/ViewDocument/undefined
似乎表明
data.Id.ToString()
正在解析为
undefined

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


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

我不知道它是否输入错误,但它是“toString()”而不是“toString”

应该是

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

事实证明,我在documentList元素上还有另外两个click绑定(绑定到其他子元素)。然而,这些是在窗口位置生效之前发射的。因此,当window.location能够执行时,url变量已超出范围。

window.location
不是您的问题。似乎
data.Id.ToString()
正在返回
undefined
。不,数组中的我的对象是不可观察的,并且没有可观察的属性。查看上面的提琴。您的提琴以前似乎工作得很好,尤其是如果我将URL更改为使用
data.id
,因为这是具有路径的部分:抱歉,我午餐前很匆忙。这是一个更新的提琴:。顶部列表中的项目返回错误。底部列表中的项起作用。(在Chrome中运行)我仍然不明白您为什么要使用
data.name
<代码>数据。名称包含“Fiddle 1”和“Fiddle 2”,这不是您想要的。您需要
数据。id
。id是明确定义的。我已经通过了调试器(chrome),并在window.location之前添加了一个警报,以显示url的值,并正确显示。
var url = path.replace("/0","/" + data.Id.toString());