0

このコードは 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

何が恋しいですか?

4

1 に答える 1

0

この問題の解決策はヘルパーではなく、代わりにコンポーネントを使用することでした。

// 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テンプレートにモデルを使用します。コンパイルされたハンドルバーにレイアウトを設定した後、実行する必要がありますthis.rerender();

コンポーネントの場合、次のように使用するすべての変数をバインドする必要があります。

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

この場合project、動的テンプレートで使用するため、バインドします。は、ストアからkey権利を取得するために使用されます。contentElement

于 2015-03-09T12:58:12.190 に答える