9

だから私はknockoutjsクリックバインディングがアンカータグにアタッチされないという本当に奇妙な問題を抱えています。その他のdata-bind=""は機能しますが、クリックバインディングは機能しません。

以下に、HTMLとviewmodeljsファイルの一部を示します。

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単語1単語2Bb単語1b単語2Ccワード1cワード2

等々...

文字は正しくA、B、Cにレンダリングされ、それぞれの文字の下に正しいタグリストが表示され、text:titleが正しく表示されます。

addFilter();を除いてすべてが機能します。タグリスト内の各リンクにバインドする関数。ブラウザがジャンプして、URLにハッシュ文字を追加するだけです。Firebugはバインディングでもエラーを表示していません。

divコンテナにwith:searchViewModelがある理由は、ページ全体のマスタービューモデルがあるためです。ただし、プロジェクトの他のすべてのページで機能しているため、これは問題ではありません。

私が考えることができる唯一のことは、クリックバインディング$ root.addFilterが間違っているということですが、firebugが「addFilterが定義されていません」というエラーを表示するaddFilterを試してみました。

そして、私は$parentと$rootの両方を試しました。

誰か提案はありますか?

4

3 に答える 3

15

私が持っていた1つの考え。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 に答える