ExtJS MVC принадлежит/имеет много дочерних элементов

Я использую ExtJS 4.0.7 с функциями ExtJS MVC. У меня есть родительская модель, которая hasMany дочерняя, которая belongsTo родительская.

Как правильно получить доступ к детям? Если я прохожу через parent.children().data.items[0].data (в отличие от parent.data.children[0]), появляется нежелательное свойство MyApp.model.parent_id. Я также заметил различия в том, как хранятся даты.

Во-первых, вот определение родителя. Так у родителя будет много детей.

Ext.define('MyApp.model.Parent', {
    extend : 'Ext.data.Model',
    fields : [ 'id' ],
    hasMany : [ {
        model : 'MyApp.model.Child',
        name : 'children'
    }],
    proxy : {
        type : 'direct',
        api : {
            create : Parents.create,
            read : Parents.read,
            update : Parents.update,
            destroy : Parents.destroy
        }
    }
});

И каждый ребенок будет принадлежать родителю.

Ext.define('MyApp.model.Child', {
    extend : 'Ext.data.Model',
    fields : [ 'id', {
        name : 'validFrom',
        type : 'date',
        dateFormat : 'time'
        } ],
    belongsTo : 'Parent'
});

Я загружаю родителя в свой контроллер:

this.getParentModel().load(id, {
    scope : this,
    success : function(parent) {
                    // the party looks good here when logged to console
                    console.log(parent);
        this.updateStore(parent);
    }
});

При проверке родителя в консоли я нахожу следующее:

  1. console.log(parent.data.children[0]):

Вывод консоли:

Object
id: 3
validFrom: -1767225600000
__proto__: Object
  1. console.log(parent.children().data.items[0].data):

Вывод консоли:

Object
id: 3
MyApp.model.parent_id: 209 // why is that here?
validFrom: Thu Jan 01 1914 01:00:00 GMT+0100 (Central European Standard Time)
__proto__: Object

введите здесь описание изображения


person ipavlic    schedule 11.10.2012    source источник
comment
Хотя я уверен, что ваш вопрос вам ясен, его трудно понять/ответить с этим показанным небольшим кодом. Не могли бы вы поделиться определением обеих моделей?   -  person Izhaki    schedule 11.10.2012
comment
@Izhaki Извините за отсутствие информации. Я сильно отредактировал свой вопрос и, надеюсь, прояснил его (я также прояснил некоторые вещи для себя).   -  person ipavlic    schedule 12.10.2012


Ответы (1)


Если я правильно понимаю, я думаю, вы хотите:

var someRecordId = 'idProperty';
var record = Ext.getStore('Parent').getById(someRecordId);

// this returns all hasMany for the name of of the property i.e. name: 'child'

record.child();  

Это вернет вам все данные элементов (на основе определения модели) в дочерней записи для родительской. Он должен включать только эти поля в определение дочерней модели. Таким образом, parent_id не будет включен. Если вы пытаетесь получить все записи для Child, вы просто получаете их так же, как и в любом другом хранилище.

person radtad    schedule 24.06.2013