9

所以我有一个非常奇怪的问题,即敲除js点击绑定没有附加到锚标签。其他 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">&#215;</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(); 一切正常 我想绑定到 taglist 中的每个链接的函数。浏览器只是跳起来并在 url 中添加一个哈希字符。Firebug 也没有在绑定上显示任何错误。

div 容器具有 with:searchViewModel 的原因是因为整个页面都有一个主视图模型。但这无关紧要,因为它正在项目的所有其他页面上工作。

我唯一能想到的是点击绑定 $root.addFilter 是错误的,但我尝试了 addFilter ,其中萤火虫给出了错误“addFilter is not defined;”

我尝试了 $parent 和 $root。

有没有人有什么建议?

4

3 回答 3

15

我有一个想法。您的addFilter函数需要一个参数 ( tag) 但您没有在绑定中传递任何内容:

<a href="#" data-bind="click:$root.addFilter">

这可能是问题吗?

也许是这样的:

<a href="#" data-bind="click:function() { $root.addFilter($data) }">

有助于?

于 2012-05-15T11:29:11.993 回答
4

我遇到了类似的事情,起初我跑了data-bind="click:function() { console.log($parents) }"。请注意,它$parents不是$parent. 我想找到上下文,我需要的那个看起来像data-bind="click:$parents[1].onCardClick"

于 2014-10-01T15:09:07.190 回答
1

我在 ko 上下文中找到并尝试使用如下示例。 $parentContext.$parent.onButtonClick

于 2021-01-26T06:58:21.380 回答