我已进入最新的Ember版本1.9.1和Handlebars版本2.0.0。在这里,我得到一个错误,例如"不推荐使用Ember.Handlebars.get,而是使用Component或Ember.Handlebars.makeBoundHelper。"
我有这样的代码,
Handlebars.registerHelper('ifCond', function (temp_v1, operator, temp_v2, options) { // No I18N
var v1,v2;
v1 = Ember.Handlebars.get(this, temp_v1, options);
v2 = Ember.Handlebars.get(this, temp_v2, options);
if( v1 == undefined ){
v1 = temp_v1;
}
if( v2 == undefined ){
v2 = temp_v2;
}
switch (operator) {
case '==':
return (v1 == v2) ? options.fn(this) : options.inverse(this);
case '!=':
return (v1 != v2) ? options.fn(this) : options.inverse(this);
default:
return options.inverse(this);
}
});
在这里,我需要检查给定的字符串值是否相等。如果我删除" Handlebars"在Ember.Handlebars.get(this,temp_v1,options)中,弃用错误将消失。但我无法获得temp_v1的原始值。
JSBIN LINK:JSBIN LINK
答案 0 :(得分:1)
对发布的代码进行最少的修改,可能的解决方案可能是将正确修改的itemController
设置为{{each}}
帮助程序,然后从此控制器检索目标属性。
此方法将itemController
结构(即item
属性和toString
函数)强烈耦合到hbs模板结构(即item
属性中定义的each
属性1}} helper),只要帮助程序保持独立且可重用,就没那么糟糕。
实施例,
http://emberjs.jsbin.com/geqezicaki/1/edit?html,js
<强> HBS 强>
<script type="text/x-handlebars" data-template-name="index">
<ul>
{{#each item in model itemController="test"}}
{{#ifCond item '==' red}}
<li>{{item}}</li>
{{/ifCond}}
{{/each}}
</ul>
</script>
<强> JS 强>
Handlebars.registerHelper('ifCond', function (temp_v1, operator, temp_v2, options) { // No I18N
var v1,v2;
//v1 = Ember.get(this, temp_v1, options);
//v2 = Ember.get(this, temp_v2, options);
v1 = options.data.view.get("controller").get(temp_v1);
v2 = options.data.view.get("controller").get(temp_v2);
if( v1 === undefined ){
v1 = temp_v1;
}
if( v2 === undefined ){
v2 = temp_v2;
}
switch (operator) {
case '==':
return (v1 == v2) ? options.fn(this) : options.inverse(this);
case '!=':
return (v1 != v2) ? options.fn(this) : options.inverse(this);
default:
return options.inverse(this);
}
});
App.TestController = Em.ObjectController.extend({
item:Em.computed.alias("model"),
toString:function(){return this.get("item");}
});