我正在尝试在对象上使用每个助手并接收:
Assertion failed: The value that #each loops over must be an Array. You passed [object Object]
使用最新版本的 Ember(1.0) 和 Handlebars。我最好的猜测是 Ember 还不支持对对象的绑定,这就是触发断言的原因。
有人可以确认吗?
我正在尝试在对象上使用每个助手并接收:
Assertion failed: The value that #each loops over must be an Array. You passed [object Object]
使用最新版本的 Ember(1.0) 和 Handlebars。我最好的猜测是 Ember 还不支持对对象的绑定,这就是触发断言的原因。
有人可以确认吗?
首先,您是对的,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;
});