Javascript-форум (https://javascript.ru/forum/)
-   ExtJS (https://javascript.ru/forum/extjs/)
-   -   Загрузка связанных данных из хранилища с прокси type=memory (https://javascript.ru/forum/extjs/55845-zagruzka-svyazannykh-dannykh-iz-khranilishha-s-proksi-type%3Dmemory.html)

khusamov 17.05.2015 00:06

Загрузка связанных данных из хранилища с прокси type=memory
 
Здравствуйте!

У меня есть хранилища Ext.data.Store с прокси type=memory, то есть данные храняться в памяти, а не удаленно.

И есть куча моделей Ext.data.Model между которыми установленны разные связи типа один-ко-многим.

В инструкции написано, что этими связями можно воспользоваться, если загружать данные при помощи модели с прокси, который имеет тип rest к примеру. Вот пример из инструкции как это делается:

// Loads User with ID 1 and related posts and comments
// using User's Proxy
MyApp.model.User.load(1, {
    callback: function(user) {
        console.log('User: ' + user.get('name'));

        user.posts(function(posts){
            posts.each(function(post) {
                console.log('Post: ' + post.get('title'));
            });
        });
    }
});


Вопрос, как мне сделать аналогичные действия (получить данные posts конкретного user), но если у меня эти данные хранятся не удаленно, а в памяти в хранилище?

Проблема в том, что когда я загружаю данные из хранилища, то я делаю это инструкцией:

Ext.data.StoreManager.lookup("users").load(...);


Но ни в хранилище users, ни в модели User нет информации из какого хранилища брать данные posts. Как их связать я пока не могу понять.

novikov 18.05.2015 12:20

Когда загружаются данные в стор через load, автоматически создаются функции для связанных моделей. Эти функции возвращают зависимый стор с зависимыми записями. Имена функциям назначаются автоматически (и ищутся в трудных случаях через консоль). Их можно также указать при определении связи (ассоциации).

писал про это как-то на форуме

По идее тип прокси не должен влиять на этот механизм.

Если связывать модели при помощи нового свойства поля reference, то там имя функции задаётся в параметре inverse:

Ext.define('MyApp.Person', {
  extend: 'MyApp.Base',
  fields: [
    { name: 'id', type: 'int' },
    { name: 'personName', type: 'string' },
    {
      name: 'person',
      reference: {
        parent: 'Department',
        inverse: 'persons'
      }
    }
 ]
});



http://docs.sencha.com/extjs/5.1/cor...l#Associations


Часовой пояс GMT +3, время: 05:47.