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:オブジェクト#にはメソッド'searchIsVisible'がありません。

私はおそらく2つの明確な問題を抱えていますが、詳細が役立つかもしれないと思いました:)

ここで何が起こっているのか理解したいですか?誰か助けてもらえますか?

ドキュメントの関連ページへのリンクも非常に役立ちます-私は今それを読んでいます。

ありがとう

4

1 に答える 1

1

関数は親コンテキストにある$parent.hideSearchElementsため、使用するときは正しかったです。関数を呼び出すと別のコンテキストがhideSearchElementsあるため、例外が発生しました。ポインタを格納するには、クロージャを使用する必要があります。次のようにビューモデルを更新します。knockoutthisthis

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 に答える