2014-01-21 55 views
0

看来我有一个封闭的问题在这里:http://jsfiddle.net/vtortola/NMHQ6/与KnockoutJs关闭问题

的代码添加一些酒吧在屏幕上,它应该减少它们全部的大小,但它只是在最后一节发生。

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); 

但我找不到问题。

回答

4

您在bar函数中缺少var关键字,所以您的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; 
} 

希望它能帮助。

+0

我一定是失明的。太感谢了。 – vtortola

+1

不要介意朋友!任何程序员都会遇到这种情况! –