javascript - 我在 Emberjs 中的虚假案例陈述正在爆炸。正确的方法是什么?

标签 javascript ember.js handlebars.js

我正在尝试根据模型中属性的当前值渲染不同的 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/

相关文章:

javascript - HTTP put请求在node和mongodb中

javascript - 在 Ember.js 中访问多个装置的数据

ember.js - 为什么 ember-cli 这么慢

javascript - 将 JSON 传递给 Backbone.Marionette View 的模板

javascript - 如何按列值对二维数组进行排序?

javascript - Electron——Chromium 脚本中需要模块

javascript - 如何从终端运行 esnext 文件

javascript - EmberJs - 如何学习以及在哪里学习?

javascript - 将变量传递给 handlebars helper 调用

javascript - 使用 RequireJS 预编译的 Handlebars 模板