当数组内部的某个可观察数组项发生更改时,更新父挖空可观察数组项
Update parent knockout observable array items when one of the observable inside array changes
我的ViewModel中基本上有一个可观察的数组
self.details=ko.observableArray([]);
它包含一个模型数组 - DetailModel,它具有isChecked
属性作为可观察量。
我想订阅对isChecked
所做的更改并删除所有其他复选框检查。
for(var i=0;i<10;++i)
{
var detail=new DetailModel(i);
detailList.push(detail);
detail.isChecked.subscribe(function(checkBoxCheckedState){
if(checkBoxCheckedState==true)
{
/* Idea is to untick all other checkboxes if one is checked */
console.log(detail);
console.log(detailList);
ko.utils.arrayFilter(self.details(), function(detailRow) {
if(detailRow.id!=detail.id)
{
detailRow.isChecked(false);
}
});
}
});
我正在循环中初始化详细信息数组并在那里附加订阅,由于闭包,订阅函数中只有最后一个详细信息对象可用。
如何在不将回调传递给子视图模型中的父/父模型引用的情况下实现相同的目标?
https://jsfiddle.net/7srbxu5y/17/
你真的需要在详细模型中isChecked
吗?是否可以考虑在父视图模型中仅使用一个selected
属性?在这种情况下,您的子模型不必了解有关父视图模型的任何信息。查看示例代码
function DetailModel(name) {
this.name = name;
}
function ViewModel(items) {
this.items = ko.observableArray(items);
this.selected = ko.observable();
}
ViewModel.prototype.select = function select(data) {
var selected = this.selected.peek();
if (selected !== data) {
this.selected(data);
} else {
this.selected(null);
}
return true;
}
工作小提琴
相关文章:
- knockoutjs可观察数组
- 将js对象更改为使用嵌套的可观察数组敲除js视图模型
- 敲除:可观察数组没有被正确绑定——只有1个结果显示,而api返回6
- $scope$观察数组中的一个特定对象——Angular JS控制器
- 如何使用敲除映射将空值映射到空的可观察数组
- 无法观察Ember.js中的对象数组
- 以不同的方式对相同的可观察数组进行排序
- 如何在 Knockout.js 中更新可观察数组后立即使用 DOM 容器
- Knockout.js:如何根据可观察数组中的更改更改值
- 使用挖空.js如何刷新 Select 元素中的可观察数组
- 谷歌跟踪代码管理器使用什么模式来观察 de 'dataLayer' 数组
- 更新挖空中可观察数组中项目的属性
- 动态地向可观察数组中的特定项添加绑定(例如hasfocus)
- AngularJS:观察数组属性
- 对可观察数组foreach的更新删除了格式化knockoutjs
- 当通过Ajax成功回调更新可观察数组时,启用绑定中断
- 如何获取复选框值并将其插入到挖空中的可观察数组中
- 剔除不更新辅助表的可观察数组
- 如何让Knockout可观察数组与jQuery对话框一起工作
- 更改可观察数组会更改自定义绑定处理程序knockoutjs的可见性