ExtJS / Touch - данные из ассоциации моделей представлены в списке - PullRequest
1 голос
/ 03 декабря 2011

Я хотел бы представить некоторые данные, извлеченные из php-скрипта, в списке в приложении sencha touch MVC.У меня есть модель клиента и модель бронирования.Ассоциация проста: у клиентов может быть много заказов, бронирование принадлежит клиенту.Я создал несколько моделей

App.models.ClientModel = Ext.regModel('ClientModel', {
idProperty: 'clientID',
fields: [
    'clientID',
    'firstName',
    'lastName',
    'email',
    'phone1',
    'extension1',
    'phone2',
    'extension2',
    'workPh',
    'workExt',
    'address1',
    'address2',
    'city',
    'province',
    'country',
    'reminderType',
    'postal',
    'noteID',
    'referredBy',
    'quickLogin',
    'creationDate',
    'modifiedDate',
    'birthDate'
],
proxy: {
    type: 'rest',
    url : 'includes/data_api',
    appendId: true,
    extraParams: {
        model: 'Client'
    },
    format: 'php',
    reader: {
        type: 'json',
        root: 'items'
    }
},
associations: [
    {type: 'hasMany', model: 'BookingModel', primaryKey: 'bookingId', foreignKey: 'clientID', name: 'bookings'}
]});  

App.models.BookingModel = Ext.regModel('BookingModel', {
idProperty: 'bookingID',
fields: [
    'bookingID', 
    'clientID', 
    'stylistID', 
    'salonID',
    'serviceID', 
    'startDate',
    'splitStartDate',
    'splitEndDate',
    'endDate',
    'status',
    'clientNotes',
    'stylistNotes',
    'reminderSent',
    'charge',
    'offset'
],
proxy: {
    type: 'rest',
    url : 'includes/data_api',
    format: 'php',
    appendId: true,
    extraParams: {
        model: 'Booking'
    },
    reader: {
        type: 'json',
        root: 'items'
    }
},
associations: [
    {type: 'belongsTo', model: 'ClientModel', primaryKey: 'clientID', foreignKey: 'clientID', getterName: 'getClient', name: 'client'}
]});

После нескольких боев я установил ассоциацию hasMany, работающую с кодом sampe, вставленным в контроллер:

var client = App.stores.ClientStore.getAt(1);
    var bookings = client.bookings();
    bookings.clearFilter();
    bookings.filter('clientID', client.get('clientID'));
    bookings.load();

Я не могу заставить работать ассоциацию ownTo.Если я попробую приведенный ниже код, я увижу запрос к php-скрипту, но без каких-либо дополнительных параметров, поэтому он возвращает полный список клиентов, а console.log всегда возвращает первый

booking.getClient({
        success: function(client, operation) {
            console.log(client);
        }
    });

Итак,Первый вопрос: как я могу заставить это работать?И второй вопрос: как мне заставить это работать со списками?Из того, что я знаю, я перешел только Store в объект конфигурации списка.Так что, если мне нужно сделать несколько дополнительных запросов только для получения связанных данных, как я могу сделать это в списках?И как я могу ссылаться на связанные данные в xtemplate для каждого элемента списка?

...