Ember 模板将函数呈现为字符串

Ember template renders function as string

我是 ember 的新手,遇到模板问题。

我的路线

import Ember from 'ember';

import AuthenticatedRouteMixin from 'simple-auth/mixins/authenticated-route-mixin';

export default Ember.Route.extend(AuthenticatedRouteMixin, {
  model: function(params) {

    var pageNum   = params.page || 1,
        pageRows  = 8;

    return this.store.find('account', {
      page: pageNum,
      rows: pageRows
    });
  },

  setupController: function(controller, model) {
    controller.set('model', model);
    controller.set('greeting', 'Hello World');
  }
});

我的控制器

import Ember from 'ember';

export default Ember.ArrayController.extend({
  contentLength: function() {
    // console.log(this);
    // console.log('length: ' + this.get('content').length);
    // return this.get('content').length;
    return 'Test string';
  },

  actions: {}
});

模板

{{ greeting }}
{{ contentLength }}

{{ greeting }} 正确呈现。但是 {{ contentLength }} 被渲染为字符串函数..

Hello World function () { // console.log(this); // console.log('length: ' + this.get('content').length); // return this.get('content').length; return 'Test string'; }

谁能帮我解决这个问题?

谢谢

您需要在 contentLength 函数的末尾添加 .property() 以便在模板中显示它:

import Ember from 'ember';

export default Ember.ArrayController.extend({
  contentLength: function() {
    // console.log(this);
    // console.log('length: ' + this.get('content').length);
    // return this.get('content').length;
    return 'Test string';
  }.property(),

  actions: {}
});

如果您希望 属性 在控制器的另一个 属性 更改时更新,只需将其添加为 属性 的 "parameter",就像这样 .property("thepropertytoobserve") 并且 arrayController 的长度 属性 在模板中已经可用为 {{length}}

查看 doc 了解有关计算机属性的更多详细信息。

您可以在模板中使用 {{ length }},因为 ArrayControllers 已经有了 属性。

您的 contentLength 函数没有执行您想要的操作的原因是因为它不是计算的 属性。您需要使用 Ember.computed(function() { ..}) 或将 .property(...) 附加到 contentLength 函数。

例如:

contentLength: function() {
  return this.get('content.length');
}.property('content.length')