Вычисляемое поле из вложенных данных - PullRequest
2 голосов
/ 08 мая 2011

Можно ли создать некоторую Ext.data.Field, которая получала бы ее значение из вложенных данных?

Я пробовал это, но это не работает:

Ext.define('User',{
  extend: 'Ext.data.Model',
  fields: [
    {name: 'id', type: 'int'},
    {name: 'sum', type: 'float', persist: false,
      convert: function(value, record) {
        return record.products().sum('cost');
      }}
  ],
  hasMany: 'Product'
});

Ext.define('Product',{
  extend: 'Ext.data.Model',
  fields: [
    {name: 'id', type: 'int'},
    {name: 'cost', type: 'float'}
  ]
});

Я загружаю данные с сервера в одном ответе.И в этот момент мне нужно отловить событие изменения данных модели Продукта и вручную обновить поле User sum.

1 Ответ

0 голосов
/ 30 марта 2012

Попробуйте это:

Ext.define('Product',{
  extend: 'Ext.data.Model',
  fields: [
    {name: 'id', type: 'int'},
    {name: 'cost', type: 'float'}
  ]
});

Ext.define('User',{
  extend: 'Ext.data.Model',
  fields: [
    {name: 'id', type: 'int'},
    {name: 'sum',
      convert: function(value, record) {
        var sum = 0;
        Ext.each(record.products, function(cost){ sum += cost; } );
        return sum; 
      }}
  ],
  hasMany: { model : 'Product',  name : 'products' } 
});
...