0

我是 knockout.js 的新手,在foreach部分中绑定时遇到问题。我收到错误:

未捕获的错误:无法解析绑定。消息:ReferenceError:hideSearchElements 未定义;绑定值:点击:hideSearchElements

这是html的一个应用:

 <div id="searchResults" data-bind="visible: searchIsVisible">
  <label id = "lblSearchResults">select a template:</label>   
  <div data-bind="foreach: titles">
    <div data-bind="text: Title"></div>
    <div data-bind="click: hideSearchElements">hide</div>
 </div>   

并从 viewModel 中发挥作用:

var viewModel = function () {      
    this.searchIsVisible = ko.observable(true);               

    this.showSearchElements = function () {
       this.searchIsVisible(true);
    };

    this.hideSearchElements = function (
       this.searchIsVisible(false);                    }
    }

 return new viewModel();

我在 foreach 块之外的showSearchElementshideSearchElements都可以正常工作,但是在里面时,我得到了错误。

如果我添加$parent.hideSearchElements,我可以绑定,但会收到错误消息:

Uncaught TypeError: Object # has no method 'searchIsVisible' 。

我可能有两个不同的问题,但认为细节可能会有所帮助:)

我很想知道这里发生了什么?有人可以帮忙吗?

文档中相关页面的链接也将非常有帮助 - 我现在正在阅读。

谢谢

4

1 回答 1

1

使用时您是对的,$parent.hideSearchElements因为hideSearchElements函数位于父上下文中。你得到了异常,因为当knockout调用你的函数时this有另一个上下文。您必须使用闭包来存储this指针。更新您的视图模型如下:

var viewModel = function () {   
    var self = this;   
    self.searchIsVisible = ko.observable(true);               

    self.showSearchElements = function () {
       self.searchIsVisible(true);
    };

    self.hideSearchElements = function (
       self.searchIsVisible(false);                    }
    }
于 2012-12-11T10:40:30.107 回答