Javascript window.location在knockoutjs viewmodel中不工作
我有以下资料: HTMLJavascript 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
<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());