対応するボタンを押すと、配列を前後に回転させたい(カルーセル)。以下のコードはまさにそれを行います。
今、私は自分自身に、これが正しい方法であると尋ねました。回転関数からの結果を再バインドする方法を意味します。
self.list(myNewArray) を使用して、以前の配列を破棄します。これは正しいです?
$(function () {
Array.prototype.rotateLeft = function () {
var first = this.shift();
this.push(first);
return this;
}
Array.prototype.rotateRight = function () {
var last = this.pop();
this.unshift(last);
return this;
}
var numbers = [1, 2, 3, 4, 5];
function NumberViewModel(numbers) {
var self = this;
self.list = ko.observableArray(numbers);
self.rotateLeft = function () {
self.list(self.list().rotateLeft());
};
self.rotateRight = function () {
self.list(self.list().rotateRight());
};
}
var vm = new NumberViewModel(numbers);
ko.applyBindings(vm);
});
</script>
</head>
<body>
<button data-bind="click: rotateLeft">rotate left</button>
<button data-bind="click: rotateRight">rotate right</button>
<ul data-bind="template: { name: 'listTempl', foreach: list }">
</ul>
<script id="listTempl" type="text/html">
<li style="float:left;list-style:none;padding-left:5px;font-size:30px;" data-bind="text: $data"></li>
</script>
</body>
</html>