我正在尝试根据模型中属性的当前值渲染不同的 Handlebars 模板,并且可能有很多选项(因此我不想使用大量 {{#如果}}
s)。我能想到的最好的事情是:
Ember.Handlebars.registerBoundHelper('selectorType', function(name, options) {
return Ember.Handlebars.compile("{{template _selectors_" + name + "}}")(options.contexts[0], options);
});
我在我的模板中使用它,例如:
{{selectorType selector.name}}
(而不是一百个 {{#if}}
)
问题是我在渲染过程中收到此错误:“您不能在渲染过程之外使用appendChild”
显然我做错了什么。正确的做法是什么?
最佳答案
我认为没有必要创建一个助手来做到这一点。您可以在 View 中执行此操作,方法是修改 templateName
,然后在更改其 templateName
后调用 rerender
方法:
init: function() {
this.set('templateName', 'firstOne');
this._super();
},
click: function() {
this.set('templateName', 'secondOne');
this.rerender();
}
我们可以在模板渲染之前使用 init
方法设置空的 templateName
。然后我们将调用 _super
方法来完成将 View 插入到 DOM 中。然后我们可以通过点击事件触发 View 的变化。我们更新 templateName
变量,然后调用 rerender()
来重新渲染此特定 View 。
我已经为您设置了一个 JSFiddle 作为示例:http://jsfiddle.net/pFkaE/尝试单击“第一个”。将 View 更改为 secondOne
。
关于javascript - 我在 Emberjs 中的虚假案例陈述正在爆炸。正确的方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14755313/