Сенча 2: Синхронизация моделей с ассоциациями hasMany в LocalStorage - PullRequest
1 голос
/ 19 марта 2012

После нескольких часов попыток сделать это, мне нужна твоя помощь.

У меня есть модели: проект и задача. Проект имеет много задач, и задача принадлежит проекту. Все работает хорошо, если вы не используете магазин для сохранения этих моделей.

Я хочу сохранить задачи и проекты в двух хранилищах (TaskStore и ProjectStore). В этих магазинах используется прокси LocalStorage.

Я пробовал много вещей, и самое логичное:

Ext.define('MyApp.model.Task', {
    extend: 'Ext.data.Model',
    config: {
        fields: [
        {
            name: 'name',
            type: 'string'
        },
        {
            dateFormat: 'd/m/Y g:i',
            name: 'start',
            type: 'date'
        },
        {
            dateFormat: 'd/m/Y g:i',
            name: 'end',
            type: 'date'
        },
        {
            name: 'status',
            type: 'string'
        }
        ],
        belongsTo: {
            model: 'MyApp.model.Project'
        }
    }
});


Ext.define('MyApp.model.Project', {
    extend: 'Ext.data.Model',
    alias: 'model.Project',
    config: {
        hasMany: {
            associationKey: 'tasks',
            model: 'MyApp.model.Task',
            autoLoad: true,
            foreignKey: 'project_id',
            name: 'tasks',
            store: {storeId: "TaskStore"}
        },
        fields: [
            {
                name: 'name',
                type: 'string'
            },
            {
                dateFormat: 'd/m/Y',
                name: 'start',
                type: 'date'
            },
            {
                dateFormat: 'd/m/Y',
                name: 'end',
                type: 'date'
            }
        ]
    }
});

Это мой "главный":

var project = Ext.create("MyApp.model.Project", {name: "mojo", start: "17/03/2011", end: "17/03/2012", status: "termine"});
var task = Ext.create("MyApp.model.Task", {name: "todo", start: "17/03/2011 10:00", end: "17/03/2012 19:00", status: "termine"});
project.tasks().add(task);
Ext.getStore("ProjectStore").add(project);

Проект добавлен в магазин, а задача - нет. Почему?!

Ответы [ 2 ]

1 голос
/ 26 ноября 2012

Краткий ответ: не работает на момент написания статьи.Я думаю, что должно, но это не так.Я закончил тем, что создал довольно сложные обходные пути.Я могу сказать, что, только что закончив довольно сложный проект Sencha Touch 2, все еще стоит использовать ассоциации hasMany, потому что в течение сеанса он дает некоторые существенные преимущества.Тем не менее, при сохранении состояния, я думаю, вам придется свернуть свое собственное и восстановить вручную.Смотрите это сообщение:

http://www.sencha.com/forum/showthread.php?240144-Type-of-hasmany-associations-localstorage-store-can-not-be-retrieved-out

0 голосов
/ 23 апреля 2012

Не забудьте сохранить или синхронизировать магазин после добавления задачи

Ext.getStore("ProjectStore").sync();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...