我正在使用Knockout webmail tutorial作为我正在处理的单页应用程序的模板。
但是我在实现点击活页夹方面遇到了麻烦,我之前有过这样的事情,但他的点击事件被劫持了。
我的视图模型有一个功能:
var self = this;
self.goToItem = function(item) { location.hash = "#/Item/" + item.id };
这是标准的。
<h2>Saved Items</h2>
<div data-bind="foreach: savedItems">
<div data-bind="click: $root.goToItem">
<p data-bind="text: name"></p>
</div>
</div>
我试过了:
<pre data-bind="text: ko.toJSON($root, null, 2)"></pre>
但是,有意思的是,虽然foreach有数据可以循环播放,但它仍然是空的。
现在的问题是鼠标点击现在被jQuery捕获了,我之前没有必须深入研究,但我确信没有jQuery的淘汰赛。目前我使用的唯一jQuery是Ajax调用。
那么我该去哪里检查DOM对象上的事件,最好是在Chrome中?
jQuery怎么能进入?
答案 0 :(得分:1)
您是否尝试过使用clickBubble绑定?
防止事件冒泡
默认情况下,Knockout将允许click事件继续冒泡到任何更高级别的事件处理程序。例如,如果您的元素和该元素的父元素都处理click事件,则将触发两个元素的单击处理程序。如有必要,可以通过包含名为clickBubble的附加绑定并向其传递false来阻止事件冒泡,如下例所示:
<div data-bind="click: myDivHandler">
<button data-bind="click: myButtonHandler, clickBubble: false">
Click me
</button>
</div>
通常,在这种情况下,首先调用myButtonHandler,然后click事件将冒泡到myDivHandler。但是,我们添加的值为false的clickBubble绑定会阻止事件通过myButtonHandler。
有关点击约束的更多详情,请访问http://knockoutjs.com/documentation/click-binding.html
答案 1 :(得分:0)
如果我更换了
click: $root.goToItem
带
click: goToItem
它再次起作用。
似乎jQuery事件触发是一个红色的鲱鱼,我把它比作一个工作系统,它开始于jQuery。我不得不重新调试我的DOM调试,这不是坏事。
$ root 是否超级,其他人需要向我指出这一点。我确信在foreach循环中你只能通过$ root访问$ root函数。