Javascript foreach项上的敲除绑定未更新
我正在使用按钮上的单击事件来设置使用Javascript foreach项上的敲除绑定未更新,javascript,knockout.js,Javascript,Knockout.js,我正在使用按钮上的单击事件来设置使用foreach生成的项目的值 <table> <tbody data-bind="foreach: Employees"> <a data-bind="click:$parent.delete()"> .. 当我创建时,我将所有单独的属性设置为可观察的,但在foreach循环中它们似乎不是 更新 员工被过滤。计算 var Employees=ko.computed(function() { return
foreach
生成的项目的值
<table>
<tbody data-bind="foreach: Employees">
<a data-bind="click:$parent.delete()">
..
当我创建时,我将所有单独的属性设置为可观察的,但在foreach循环中它们似乎不是
- 更新
var Employees=ko.computed(function() {
return ko.utils.arrayFilter(AllEmployees(), function (empid) {
return empid.ID == filter();
});
当您获取/设置可观察对象时,您需要这样调用它们:
var val = obj.prop(); //Getter
obj.prop(false); //Setter
另一个问题是,在单击绑定中使用括号。请记住,敲除绑定只是javascript,因此它在绑定时将实际执行该表达式
您需要去掉这些括号,否则emp
最初将是未定义的
更新:
我已经更新了这个JSFIDLE,以包含三个过滤列表,类似于上面所示。您可以看到,通过computed命令使用过滤列表与knockout如何处理绑定无关,,并且UI会无缝更新
敲除订阅可观察数组,但不订阅该数组中的每个可观察数组。如果要订阅单个属性,则需要使用myObservable.subscribe()手动订阅
敲除订阅可观察数组,但不订阅该数组中的每个可观察数组。如果要订阅单个属性,则需要使用myObservable.subscribe()手动订阅 编辑 如果您试图让计算机跟踪计算机中应该包含的内容,您可以这样做-
var allEmployees = ko.observableArray([my data goes here]);
var Employees=ko.computed(function() {
return ko.utils.arrayFilter(allEmployees(), function (emp) {
return emp.active === true;
});
});
如果active不是每个allEmployees()的可观察属性,则该选项有效。如果是可观察的,只需将其更改为-
var allEmployees = ko.observableArray([my data goes here]);
var Employees=ko.computed(function() {
return ko.utils.arrayFilter(allEmployees(), function (emp) {
return emp.active();
});
});
要设置可观察对象,必须调用它(因为可观察对象是作为函数实现的):
您的方法只是覆盖了可观察对象。当我这样做时,我会得到一个错误,说它没有名为active的方法,那么
active
不能是可观察对象。我认为我们需要看到更多的代码来确定问题所在。你能创建一个JSFIDLE或者一些重现问题的东西吗?我会看看我能不能创建一个FIDLE。。。可能是因为它被过滤了吗?var Employees=ko.computed(函数(){return ko.utils.arrayFilter(AllEmployees(),函数(empid){return empid.ID==filter();});@user2643709-不,过滤列表不应该干扰可观察对象和绑定。我已经更新了我的小提琴,以证明通过计算使用过滤列表对绑定没有影响。感谢详细的示例,我能够找到问题。这是数组如何初始化的问题。有点……如果你有foreach的话绑定,然后在模板中设置单个绑定,然后当您更改单个项目时,UI将更新。您不必订阅单个项目,除非您纯粹是在代码中进行的。好的,他提到的方式是纯粹在代码中进行的…请留下来,我可以向您展示一些关于淘汰的内容。我更新了我的答案与编辑,应该有助于你。
var allEmployees = ko.observableArray([my data goes here]);
var Employees=ko.computed(function() {
return ko.utils.arrayFilter(allEmployees(), function (emp) {
return emp.active();
});
});
emp.active(false);