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

时间:2015-01-12 11:37:36

标签: ember.js handlebars.js

我是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'; }

有谁可以帮我解决这个问题?

由于

2 个答案:

答案 0 :(得分:1)

您需要在.property()功能的末尾添加contentLength才能在模板中显示它:

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: {}
});

如果您希望在控制器的其他属性发生更改时更新属性,只需将其添加为属性的“参数”,如此.property("thepropertytoobserve"),并且arrayController的length属性已经可用{{1}在模板中。

有关计算机属性的更多详细信息,请查看doc

答案 1 :(得分:1)

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

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

例如:

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