knockout.js获胜't更新我的foreach绑定,尽管更改已注册
knockout.js won't update my foreach binding although the change is registered
我正在尝试使用jQuery的animate
方法为observableArray
中的对象设置动画。为了做到这一点,我使用了我制作动画的数组的中介副本,然后将其值重新应用于observableArray
,如:
function VM(){
var self = this;
this.array = ko.observableArray([{val:2},{val:4}]);
this.array.subscribe(function(changeset){
console.log('updating values', JSON.stringify(self.array())); //this fires just fine
});
};
var model = new VM();
ko.applyBindings(model);
var mediator = ko.toJS(model.array);
var target = [{val:200},{val:400}];
$.each(mediator, function(i, el){
$(el).animate(target[i], {
duration : 500,
progress : function(){
model.array(mediator);
}
});
});
值更新得很好(订阅的函数会触发并提供正确的结果),但当我尝试将其与此视图绑定时:
<div data-bind="foreach: array">
<p data-bind="text:val"></p>
</div>
它从不更新。看小提琴:http://jsfiddle.net/JKALt/2/
知道我在这里做错了什么吗?
我设法让一些东西发挥作用,告诉我如果有帮助,看看这个小提琴:http://jsfiddle.net/JKALt/3/
主要变化是
this.array = ko.observableArray([ko.observable({val:2}),ko.observable({val:4})]);
我认为问题在于:创建一个可观察数组并不意味着数组中的对象是可观察的。您必须使数组中的项可见。
关键点:observableArray跟踪哪些对象在数组中,而不是这些对象的状态
来自http://knockoutjs.com/documentation/observableArrays.html
还要注意,您必须更新可观察性的值。不过,我认为可以找到一种更好的更新方式。
progress : function(){
model.array()[0](mediator[0]);
model.array()[1](mediator[1]);
}
相关文章:
- 在VanillaJS中模拟模型双向数据绑定
- 无法通过数组映射绑定
- 主干-不管怎样,检查事件以前是否绑定过
- 用于搜索的聚合物嵌套绑定
- Angular:更新一次性绑定的数据
- 如何使用ngrepeat和双向绑定获得指令的隔离范围
- react.js中的密钥绑定
- 使用regex的jquery keydown绑定不会验证撇号和句点
- 将事件处理程序绑定到任何可能的事件
- AngularJS指令只识别双向绑定类型
- Telerik rad组合框多列数据绑定
- 对API数据使用声明性绑定
- 如何销毁/删除/取消绑定SnapSVG.js
- 在D3.js中,有没有任何方法可以将x和y方向上的滚动事件绑定到平移svg
- 数据绑定:'系统Char'不包含名为'xxxxx'
- react组件中的绑定方法
- 注册OpenLayers事件时,即使使用匿名函数或绑定,JavaScript关闭也会触发循环内的所有内容
- knockout.js获胜't更新我的foreach绑定,尽管更改已注册
- Javascript 不与 magento 中的客户注册表单验证绑定
- 绑定错误.模块没有自我注册