交换 2 个项目在可观察数组 - 挖空
Swap 2 items in observableArray - knockout
im tring to 用 KNOCKOUT 替换 observableArray 中的 2 个项目,但有问题。
替换项目后,我将更改 displayOrder 属性(在两个 itmems 中)发送到服务器(或者我应该为此采取其他方法)
ReplaceBetweenTwoitemsInArray: function () {
console.log("ranking down msg");
var currentItemindex = viewModel.myobservableArray.indexOf(this);
var nextItemIndex = currentItemindex + 1;
viewModel.myobservableArray .replace(
viewModel.myobservableArray ()[nextItemIndex],
viewModel.myobservableArray ()[currentItemindex]
);
}
只有第一项更改为第二项,但第二项不会成为第一项
与保利的答案类似,但也会触发对可观察量的更新,可能是 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);
您可以使用临时变量:
var arr = ko.observableArray([0, 1])
// Should produce arr() = [0, 1]
var tmp = arr()[0];
arr()[0] = arr()[1];
arr()[1] = tmp;
// At this point, arr() is [1, 0]
你可以直接在 observableArray 上使用 remove 和 splice 函数,如下所示:
var arr=ko.observableArray(["x","y"]);
var index=arr.indexOf("y");
var tmp=arr()[index-1];
arr.remove(tmp);
arr.splice(index,0,tmp);
相关文章:
- knockoutjs可观察数组
- 将js对象更改为使用嵌套的可观察数组敲除js视图模型
- 敲除:可观察数组没有被正确绑定——只有1个结果显示,而api返回6
- $scope$观察数组中的一个特定对象——Angular JS控制器
- 如何使用敲除映射将空值映射到空的可观察数组
- 以不同的方式对相同的可观察数组进行排序
- 如何在 Knockout.js 中更新可观察数组后立即使用 DOM 容器
- Knockout.js:如何根据可观察数组中的更改更改值
- 使用挖空.js如何刷新 Select 元素中的可观察数组
- 更新挖空中可观察数组中项目的属性
- 动态地向可观察数组中的特定项添加绑定(例如hasfocus)
- AngularJS:观察数组属性
- 对可观察数组foreach的更新删除了格式化knockoutjs
- 当通过Ajax成功回调更新可观察数组时,启用绑定中断
- 如何获取复选框值并将其插入到挖空中的可观察数组中
- 剔除不更新辅助表的可观察数组
- 如何让Knockout可观察数组与jQuery对话框一起工作
- 更改可观察数组会更改自定义绑定处理程序knockoutjs的可见性
- 正在更新Knockoutjs可观察数组项
- Knockout,无法解析空可观察数组中的绑定错误