小さなフィードバックフォームに取り組んでいて、私はKnockout / jQueryゲームに慣れていないので、これは構文エラーであると確信しています。
目標/背景
- フィードバックフォームがあり、その一部にフィードバックタイプのリストが含まれています。使用したいフィードバックタイプの実際のテキストは、LIタグの「タイトル」属性に保存されます。
- フィードバックのタイプを示す一連のLIタグのそれぞれからonclickを渡したいと思います。
- 呼び出し元の要素でこのonclickイベントをノックアウトで受信したい
- ViewModel関数で、LIのタイトル属性の内容に基づいてViewModelのフィードバックタイプを更新したいのですが。
- 次に、すべてのリストからクラスを削除して、選択した要素に適用したいと思います。
- 私はすでにこれを行うjQueryを持っています。モデルの変更に組み込みたいだけです。
私がこれまでに持っているもの
HTMLフィードバックフォーム(ULリスト)の関連部分:
<ul class="thumbnails" id="feedbackList">
<li class="feedbackItem" id="feedbackItemPraise" title="Praise" data-bind="click: updateFeedbackType"><i class="icon-thumbs-up"></i>Praise</li>
<li class="feedbackItem" id="feedbackItemCriticism" title="Criticism" data-bind="click: updateFeedbackType"><i class="icon-thumbs-down"></i>Criticism</li>
<li class="feedbackItem" id="feedbackItemProblem" title="Problem" data-bind="click: updateFeedbackType"><i class="icon-warning-sign"></i>Problem</li>
<li class="feedbackItem" id="feedbackItemQuestion" title="Question" data-bind="click: updateFeedbackType"><i class="icon-question-sign"></i>Question</li>
</ul>
これまでのViewModel(いくつかの無関係な部分を含む):
var FeedbackViewModel = function () {
var self = this;
self.manualEMailAddress = "MyEmail@MyProvider.com";
self.manualApplicationName = "MyApplication";
self.username = ko.observable($("#feedbackUsernameFromServer").val());
self.feedbackType = ko.observable("Praise");
self.wantsFollowUp = ko.observable(true);
self.enteredName = ko.observable("");
self.feedbackText = ko.observable("");
self.userNameCaptured = ko.computed(function () { return self.username().length > 3; }, self);
self.mailToLink = ko.computed(function () { return "mailto:" + self.manualEMailAddress + "?subject=" + encodeURIComponent(self.feedbackType()) + encodeURIComponent(" for ") + encodeURIComponent(self.manualApplicationName) + "&body=" + encodeURIComponent(self.feedbackText()) }, self);
};
var feedbackViewModel = new FeedbackViewModel();
ko.applyBindings(feedbackViewModel, document.getElementById("feedbackModal"));
スタイルを変更する現在のjQuery(まだモデルにリンクされていません):
$("#feedbackList li").click(function () {
$("#feedbackList li.feedbackItem-Highlighted").removeClass("feedbackItem-Highlighted");
$(this).addClass("feedbackItem-Highlighted");
});
ViewModelに追加する必要があると思いますが、完全には機能しません。
self.updateFeedbackType = function (elementToChangeTo) {
self.feedbackType($(elementToChangeTo).attr("title"));
$("#feedbackList li.feedbackItem-Highlighted").removeClass("feedbackItem-Highlighted");
$(elementToChangeTo).addClass("feedbackItem-Highlighted");
};
これにより、feedbackTypeが未定義になり、視覚的な変更は発生しません。
どこが間違っているのですか?助けてくれてありがとう!