<style type="text/css"> .l_circle{ height: 10px; width: 10px; margin: 5px; display: inline-block; border-radius: 6px; -moz-border-radius:6px; -webkit-border-radius:6px; } .black{ border: 1px black solid; background-color: black; height: 12px; width: 12px; border-radius: 7px; -moz-border-radius:7px; -webkit-border-radius:7px; } .white{ border:1px gray solid; background-color: white; } .gray{ border:1px gray solid; background-color: gray; } </style> <div data-bind="starRating: points"></div> <button data-bind="click:addPoint">Next</button> $(function(){ ko.bindingHandlers.starRating = { init: function(element, valueAccessor) { //$(element).addClass(""); var array = valueAccessor(); //alert(array()[0]); for (var i = 0; i < array()[1]; i++) $("<span>").addClass('l_circle').appendTo(element); // Handle mouse events on the stars $("span", element).each(function(index) { }); }, update: function(element, valueAccessor) { // Give the first x stars the "chosen" class, where x <= rating var array = valueAccessor(); $("span", element).each(function(index) { $(this).toggleClass("gray", index < array()[0]); $(this).toggleClass("white", index > array()[0]); $(this).toggleClass("black", index == array()[0]); }); } }; function WebmailViewModel() { self.points = ko.observableArray(); self.points([10,30]); self.addPoint = function(){ var _array = self.points(); _array[0]++; self.points(_array); } } <script type="text/javascript" src="jquery.min.js"></script> <script type="text/javascript" src="knockout-3.0.0.js"></script>
效果圖:javascript