与保利的答案类似,但也会触发更新观测值,可能是DRYer。
http://jsfiddle.net/marrok/ckMJE/101/
<ul data-bind="foreach: colors">
<li><span data-bind="text:color"></span>
</li>
</ul>
<br/>
<span>From:</span><input type="text" data-bind="value:from"/>
<br/>
<span>TO:</span><input type="text" data-bind="value:to"/>
<br/>
<button data-bind="click:swap">Swap It</button>
的Javascript:
var ViewModel = function() {
this.self = this;
self.from = ko.observable(0); // default
self.to = ko.observable(1); // default
self.colors = ko.observableArray([{
color: 'red'},
{
color: 'green'},
{
color: 'pink'},
{
color: 'blue'},
{
color: 'yellow'}]);
self.swap= function() {
var iTo = parseInt(self.to());
var iFrom = parseInt(self.from());
var from = self.colors()[iFrom];
var to = self.colors()[iTo];
console.log("Before", self.colors().map(function(d){return d.color;}), from, to, iFrom, iTo)
self.colors()[iTo] = from;
self.colors()[iFrom] = to;
console.log("After ", self.colors().map(function(d){return d.color;}), from, to, iFrom, iTo)
self.colors.valueHasMutated()
};
};
model = new ViewModel()
ko.applyBindings(model);
什么是 “东西”,也就是错误? – Bergi
我不确定viewModel.messages是什么,但调用它(使用“()”)似乎是奇怪的,因为它看起来像一个数组或字符串。 – Bergi
'替换'不做交换。你为什么使用两个数组('myobservableArray'和'messages')?两个阵列中的顺序是不同的? –