2013-10-31 77 views
2

的能力,我嘗試使用每個幫助過的對象,並得到:灰燼不支持把手使用的每個對象

Assertion failed: The value that #each loops over must be an Array. You passed [object Object] 

使用灰燼(1.0)和車把的最新版本。我最好的猜測是Ember不支持綁定對象,這就是斷言觸發的原因。

有人可以確認嗎?

+0

你爲什麼要這麼做?你能不能索引你想要的價值?或者,如果你不想使用這些值,你總是可以把它變成一個數組?我無法想象會有支持在對象上使用#each。 – Hana

+2

也許他試圖循環一個對象,並打印每個屬性,它的價值? – mlienau

回答

0

首先,你是正確的,Ember本身依賴於作爲數組的項目。由於Ember試圖保持性能,而不是重新渲染/重新計算已經完成的項目,所以添加了一個數組觀察器,並且觀察項目每次都會更改一個,而不是重新渲染整個集合。

的每個助手本身實際上支持循環訪問對象(該對象中的關鍵的)

Handlebars.registerHelper('each', function(context, options) { 
    var fn = options.fn, inverse = options.inverse; 
    var i = 0, ret = "", data; 

    var type = toString.call(context); 
    if(type === functionType) { context = context.call(this); } 

    if (options.data) { 
    data = Handlebars.createFrame(options.data); 
    } 

    if(context && typeof context === 'object') { 
    if(context instanceof Array){ 
     for(var j = context.length; i<j; i++) { 
     if (data) { data.index = i; } 
     ret = ret + fn(context[i], { data: data }); 
     } 
    } else { 
     for(var key in context) { 
     if(context.hasOwnProperty(key)) { 
      if(data) { data.key = key; } 
      ret = ret + fn(context[key], {data: data}); 
      i++; 
     } 
     } 
    } 
    } 

    if(i === 0){ 
    ret = inverse(this); 
    } 

    return ret; 
});