Knockout ViewModel のアイテムに $data を使用して連結された css クラス名を適用する方法を知りたいです。
ゴール
ユーザーが "Praise" ボタン (私の ViewModel 配列の項目) をクリックすると、CSS クラス "feedbackItemIconPraise" を LI に適用したいと思います。ユーザーが「Criticism」をクリックした場合、クラス「feedbackItemIconPraise」を適用したいと思います。
$data を使用して data-bind 属性で css クラスを連結するのが正しい方法だと思いましたが、間違っている可能性があります。
コード
私のViewModelの関連部分:
var FeedbackViewModel = function () {
var self = this;
self.feedbackItemTypes = ['Praise', 'Criticism', 'Problem', 'Question'];
self.selectedFeedbackType = ko.observable('Praise');
self.updateSelected = function (param) {
self.selectedFeedbackType(param);
};
};
var feedbackViewModel = new FeedbackViewModel();
ko.applyBindings(feedbackViewModel, document.getElementById("feedbackModal"));
ビュー表示の関連部分:
<div id="feedbackListContainer">
<ul class="thumbnails" id="feedbackList" data-bind="foreach: feedbackItemTypes">
<li class ="feedbackItem" data-bind="click: $parent.updateSelected, text:$data, attr:{id:'feedbackItem'+$data, title:$data}, css: {'feedbackItem-Highlighted':$data==$parent.selectedFeedbackType(), 'feedbackItemIcon'+$data: true}">
</li>
</ul>
</div>
問題
私が間違っていると思うのは、CSS クラス "'feedbackItemIcon' + $data" を適用することです。css クラスがどのように適用されるか、またこれが Knockout で可能かどうか、または Knockout の動作と矛盾するかどうかを誤解していると思います。このようにしようとすると、すべてのテキストが消えてしまうので、構文を完全に台無しにしていると思います。
いくつかの洞察をいただければ幸いです。