这里似乎有一个闭包问题:http://jsfiddle.net/vtortola/NMHQ6/
代码在屏幕上添加了一些条形图,它应该减小所有条形图的大小,但它只发生在最后一条。
var bar = function(start){
me = {};
me.width = ko.observable(start);
var countDown = function(milliseconds, step, callback){
callback(milliseconds);
if(milliseconds>0)
setTimeout(function(){ countDown(milliseconds-step,step,callback);}, step+10);
};
countDown(start, 1, function(m){me.width(m); });
return me;
}
var viewModel = function(){
var me ={};
me.bars = ko.observableArray();
for(var i=0;i<20;i++){
me.bars.push(bar(300));
}
return me;
}
ko.applyBindings(viewModel);
但我找不到问题。
答案 0 :(得分:4)
您遗漏了var
函数中的bar
关键字,因此,您的me
变量在全局范围内声明。出于这个原因,并且因为在javascript对象中通过引用传递,所以me.bars
填充了相同的content
。
一个简单的解决方法是:
var bar = function(start){
var me = {};
me.width = ko.observable(start);
var countDown = function(milliseconds, step, callback){
callback(milliseconds);
if(milliseconds>0)
setTimeout(function(){ countDown(milliseconds-step,step,callback);}, step+10);
};
countDown(start, 1, function(m){me.width(m); });
return me;
}
希望它有所帮助。