だから私は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">×</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の両方を試しました。
誰か提案はありますか?