【问题标题】:Access view helper directly with Ember.Handlebars.helpers.view in ember 1.10.0在 ember 1.10.0 中直接使用 Ember.Handlebars.helpers.view 访问视图助手
【发布时间】:2015-05-08 05:13:37
【问题描述】:

此代码在 ember 1.7.0 中有效:

 var ViewTemplateHelper = Ember.Handlebars.makeBoundHelper(function(templateString, options) {

  var dummy = Ember.View.extend({
    classNames: ['view-template'],
    template: Ember.Handlebars.compile(templateString)
  });

  var view = dummy.create();

  if (options && options.hash) {
    options.hash.content = template;
  }

  // Hack to prevent appendChild error
  if (options.data.view._state === 'inDOM') {
    options.data.view.rerender();
    options.data.view.renderToBuffer();
  }

  return Ember.Handlebars.helpers.view.call(this, view, options); // undefined is not a function
});

export
default ViewTemplateHelper;

但现在在 ember 1.10.0 中给出了undefined is not a function 错误。

我尝试使用Ember.Handlebars.helpers.view.helperFunction.call

我错过了什么?

【问题讨论】:

  • 这段代码的意图是什么?我觉得你在升级框架时总是会遇到一些问题,因为你正在使用一些内部 API。
  • 我正在尝试使用来自帮助程序内部的外部 API 端点的模板。所以在某处的数据库中有模板(userTemplate)User {{user.name}},我想通过{{view-template userTemplate}}显示它

标签: ember.js ember-cli htmlbars


【解决方案1】:

这个问题的解决方案不是在帮助器中,而是使用组件来代替。

// components/content-element.js
import Ember from 'ember';

export
default Ember.Component.extend({
  updateLayout: function() {
    var store = this.container.lookup('store:main');
    var projectId = this.get('project.id');
    store.find('contentElement', {
      key: this.get('key'),
      project_id: projectId
    }).then(function(contentElement) {
      if (!Ember.isEmpty(contentElement.get('firstObject.value'))) {
        var template = contentElement.get('firstObject.value');
        var compiled = Ember.Handlebars.compile(template);
        this.set('layout', compiled);
        this.rerender();
      }
    }.bind(this));
  }.observes('key').on('init')
});

我们使用模型contentElement 作为我们的模板。将布局设置为已编译的 Handlebars 后,您必须运行 this.rerender();

对于组件,您必须像这样绑定所有要使用的变量:

{{content-element key="name.of.element" project=project}}

在这种情况下,我们在动态模板中使用project,因此我们对其进行了绑定。 key 用于从商店获取正确的contentElement

【讨论】:

    猜你喜欢
    • 2014-12-18
    • 1970-01-01
    • 2016-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多