【发布时间】:2012-05-22 21:23:47
【问题描述】:
所以我有一个非常奇怪的问题,即 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>
基本上它是一个模态弹出窗口,当用户单击页面上的链接时会加载它。 我向服务器发送一个请求,它返回一个标签容器列表,每个标签容器都有一个起始字母和一个要在字母下方呈现的标签列表,如下所示: 一种 一句话1 一句话2 乙 b 字 1 b 字 2 C c字1 c字2
等等……
字母 A、B、C 正确呈现,并且每个字母都得到正确的标签列表呈现在它们下方,并且 text:title 显示正确。
除了 addFilter(); 之外的一切都有效我想绑定到 taglist 中的每个链接的函数。浏览器只是跳起来并在 url 中添加一个哈希字符。 Firebug 也没有在绑定上显示任何错误。
div 容器有一个 with:searchViewModel 的原因是因为整个页面都有一个主视图模型。但这无关紧要,因为它正在项目的所有其他页面上工作。
我唯一能想到的是点击绑定 $root.addFilter 是错误的,但我只尝试了 addFilter ,其中 firebug 给出了错误“addFilter is not defined;”
我尝试了 $parent 和 $root。
有人有什么建议吗?
【问题讨论】:
-
您能解释一下您是如何解决的吗,我将不胜感激。
标签: javascript jquery asp.net-mvc-3 knockout.js knockout-2.0