Ember.js - 获取LinkView在手柄帮助中重新渲染

时间:2014-01-19 14:19:48

标签: ember.js

我遇到了一个问题,我无法使用此jsbin中的灯具创建。

上面的代码实际上是链接到把手帮助器的包装器:

Ember.Handlebars.registerHelper('resource-link-to', function(name, options) {
  var args = Array.prototype.slice.call(arguments, 1);
  var resource = this.get(name);
  var resourceRoute = resource.humanize();

  if (!options.fn) {
    options.types = ['STRING', 'STRING', 'ID'];
    options.contexts = [this, this, this];
    args.unshift(name);
    args.unshift(resourceRoute);
    args.unshift(resource.get('displayName'));
  } else {
    options.types = ['STRING', 'ID'];
    options.contexts = [this, this];
    args.unshift(name);
    args.unshift(resourceRoute);
  }

  var observer,
    _this = this;

  if (!resource.get('isLoaded')) {
    observer = function() {
      if (resource.get('isLoaded')) {
        //WHAT CAN I DO HERE TO GET THE LinkView to rerender?
        return resource.removeObserver('isLoaded', observer);
      }
    };
    resource.addObserver('isLoaded', observer);
  }

  return Ember.Handlebars.helpers['link-to'].apply(this, args);
});

我想要实现的是一个通用链接到帮助器,它接受我的任何ember-data模型并返回一个链接:

{{resource-link-to contact}}
{{resource-link-to user}}

这适用于灯具,但不适用于真正的适配器,因为当代码将执行转发到真正的链接帮助器时,或者可能是解决此问题的另一种方式时,并不总是加载模型?

我想要做的是创建一个观察者,当资源加载时重新呈现LinkView:

  var observer,
    _this = this;

  if (!resource.get('isLoaded')) {
    observer = function() {
      if (resource.get('isLoaded')) {
        //WHAT CAN I DO HERE TO GET THE LinkView to rerender?
        return resource.removeObserver('isLoaded', observer);
      }
    };
    resource.addObserver('isLoaded', observer);
  }

任何人都知道如何让LinkView重新渲染?

1 个答案:

答案 0 :(得分:0)

我在博客中提到了我提出的解决方案here