Ember js 2计数相关字段(hasMany)

时间:2016-04-28 22:09:22

标签: javascript ember.js

我对使用计算属性访问控制器中的ember模型感到困惑。

我的问题:我正在尝试创建两个属性来计算hasMany字段marcanet的相关对象,第二个将此属性的大小限制为仅显示n元素。

第一个风景计算模型上的属性:

import Model from 'ember-data/model';
import attr from 'ember-data/attr';
import { hasMany } from 'ember-data/relationships';
import Ember from 'ember';

export default Model.extend({
    client: attr('string'),
    figure: attr('string'),
    marcanet: hasMany('marcanet'),
    title: attr('string'),
    tm_type: attr('string'),

    total: function() {
        return this.get('marcanet.length');
    }.property('model')
    // issue i can't render it on my template as {{model.total}}
    // so, I can't understand if it is computed right.
});

转向控制器的第二个场景。

这里我只能访问主要对象商标

import Ember from 'ember';

export default Ember.Controller.extend({
    // It works
    sliceTrademarks: function() {
        return this.get('model').slice(0, 5);
    }.property('model'),
    // It works
    totalTrademarks: function() {
        return this.get('model.length');
    }.property('model'),

    // It throws me an error TypeError: this.get(...) is undefined
    sliceMarcanet: function() {
        return this.get('model.marcanet').slice(0, 2);
    }.property('model'),
    // It only give me an empty result
    totalMarcanet: function() {
        return this.get('model.marcanet.length');
    }.property('model')
});

1 个答案:

答案 0 :(得分:1)

我解决了我的问题,我做了以下工作,

我在模型上使用了计算属性来获取相关对象的大小,

// Thanks for the advice @torazaburo 
relatedTotal: Ember.computed.alias('marcanet.length')

我创建了一个名为limit的帮助程序来执行限制任务

// helpers/limit.js
import Ember from 'ember';

export function limit(params, { limitObject, size }) {
  return limitObject.slice(0, size);
}
export default Ember.Helper.helper(limit);

我的模板看起来像这样。

// template/index.hbs
{{#each model as |trademark|}}
    {{trademark.id}} limit to 2 records<br>
  <ul>
  {{#each (limit limitObject=trademark.marcanet size=2) as |related|}}
    <li>{{related.expediente}}</li>
  {{/each}}
  </ul>
{{/each}}

注意:它适用于Ember 2.4.5,请参阅我的example