foreach块中的knockout.js绑定错误

时间:2012-12-11 10:36:03

标签: javascript knockout.js

我是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的一个exert:

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

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

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

 return new viewModel();

我有 showSearchElements hideSearchElements 在foreach块之外正常工作但在其内部时,我收到了错误。

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

未捕获TypeError:对象#没有方法'searchIsVisible'

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

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

指向文档中相关页面的链接也非常有用 - 我现在正在阅读。

由于

1 个答案:

答案 0 :(得分: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);                    }
    }