我試圖在使用ratyjQuery插件的KnockoutJS中創建一個自定義綁定來爲電影做星級評分。對於RATY插件的正常實施是這樣的......在KnockoutJS中爲jQuery插件創建自定義綁定
$('.raty').raty();
<div class="raty" data-rating="3"></div>
,並且會給你這樣的事情...
<div class="raty" data-rating="3" style="cursor: pointer; width: 100px;">
<img src="/raty/img/star-on.png" alt="1" title="bad">
<img src="/raty/img/star-on.png" alt="2" title="poor">
<img src="/raty/img/star-on.png" alt="3" title="regular">
<img src="/raty/img/star-off.png" alt="4" title="good">
<img src="/raty/img/star-off.png" alt="5" title="gorgeous">
<input type="hidden" name="score" value="3">
</div>
我有電影的observableArray
,每個電影該集合有UserMovies.Rating
。當用戶更新星級,然後更新電影observableArray
中的UserMovies.Rating
值時,我努力想出一種方法來讓bindingHandler處理。
這是我在實施和bindingHandler嘗試...
<div class="raty" data-bind="raty: UserMovies[0].Rating, ratyOptions: { cancel: true, half: true, size: 24 }"></div>
ko.bindingHandlers.raty = {
init: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
var options = allBindingsAccessor().ratyOptions || {};
var value = ko.utils.unwrapObservable(valueAccessor());
// the line below throws Syntax error: Invalid label
ko.bindingHandlers.attr.update(element, { 'data-rating': value });
$(element).raty(options);
// how to fire upate function when user changes star ratings?
},
update: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
valueAccessor($(element).raty('score'));
}
};
此處提供的解決方案是否正常工作?我把這個確切的代碼,但不起作用。如何綁定點擊,所以它稱爲淘汰賽功能? – jmogera