[英]knockoutjs click binding not working in nested foreach
所以我有一个非常奇怪的问题,knockoutjs 点击绑定没有附加到锚标签。 其他 data-bind="" 有效,但单击绑定无效。
下面你可以看到HTML和viewmodel js文件的一部分
var tag = function (data) {
this.count = data.Count;
this.id = data.Id;
this.title = data.Title;
this.tagGroup = data.TagGroup;
};
var tagContainer = function (data) {
this.tagList = $.map(data.Tags, function (item) { return new tag(item); });
this.letter = ko.observable(data.Letter);
};
var searchViewModel = function(){
var self = this;
self.tagContainerList = ko.observableArray([]);
self.addFilter = function (tag) {
//move tag to active filters and do some more cool stuff here
};
};
<div id="modal-all-tags" data-bind="with:searchViewModel">
<ul data-bind="foreach:tagContainerList">
<li>
<span data-bind="text:$data.letter()"></span>
<ul data-bind="foreach:tagList">
<li><a href="#" data-bind="click:$root.addFilter"><span data-bind="text:title"></span></a></li>
</ul>
</li>
</ul>
<a class="close-reveal-modal">×</a>
</div>
基本上它是一个模态弹出窗口,当用户单击页面上的链接时会加载它。 我向服务器发送一个请求,它返回一个标签容器列表,每个标签容器都有起始字母和要在字母下方呈现的标签列表,如下所示:A a word 1 a word 2 B b word 1 b word 2 C c字 1 c 字 2
等等...
字母正确呈现 A、B、C,每个字母都会在它们下方呈现正确的标签列表,并且 text:title 显示正确。
除了 addFilter() 之外,一切正常; 我想绑定到标签列表中的每个链接的函数。 浏览器只是跳起来并在 url 中添加一个哈希字符。 Firebug 也没有显示任何绑定错误。
div 容器有 with:searchViewModel 的原因是因为整个页面都有一个主视图模型。 但这应该无关紧要,因为它正在项目的每个其他页面上工作。
我唯一能想到的是点击绑定 $root.addFilter 是错误的,但我试过只是 addFilter,其中萤火虫给出错误“addFilter 未定义;”
我尝试了 $parent 和 $root。
有没有人有什么建议?
一个想法我有过。 您的addFilter
函数需要一个参数( tag
),但您没有在绑定中传递任何内容:
<a href="#" data-bind="click:$root.addFilter">
这可能是问题吗?
也许是这样的:
<a href="#" data-bind="click:function() { $root.addFilter($data) }">
有助于?
我遇到了类似的问题,起初我跑了data-bind="click:function() { console.log($parents) }"
。 请注意,它的$parents
不是$parent
。 我寻找上下文,我需要的上下文看起来像data-bind="click:$parents[1].onCardClick"
我在 ko 上下文中找到并尝试使用如下示例。 $parentContext.$parent.onButtonClick
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.