【问题标题】:Sencha 2 : Sync models with hasMany associations in LocalStorageSencha 2:将模型与 LocalStorage 中的 hasMany 关联同步
【发布时间】:2012-04-04 01:18:32
【问题描述】:

经过数小时的努力,我需要你的帮助。

我必须模型:项目和任务。一个项目有很多任务,一个任务属于一个项目。如果您不使用商店来保存这些模型,Everyting 效果很好。

我想将任务和项目都保存在两个存储(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);

项目已添加到商店,但任务未添加。为什么?!

【问题讨论】:

    标签: javascript extjs


    【解决方案1】:

    简短回答:在撰写本文时,它不起作用。我认为应该,但事实并非如此。我最终创建了相当复杂的解决方法。我可以说刚刚完成了一个相当复杂的 Sencha Touch 2 项目,它仍然值得使用 hasMany 关联,因为在会话过程中它提供了一些显着的好处。但是,在存储状态时,我认为您必须自己滚动并手动重组。看这篇文章:

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

    【讨论】:

    • 这仍然是 Sencha Touch 2.3.0(2013 年 8 月)的状态:不支持关联存储。
    【解决方案2】:

    添加任务后不要忘记保存或同步商店

    Ext.getStore("ProjectStore").sync();
    

    【讨论】:

    • 已经尝试过了,即使两个商店都设置为在更改时同步。
    • 这是一个值得记住的好方法,但它不能解决问题,我认为问题是 ST2 的限制。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-15
    • 2020-02-03
    • 1970-01-01
    • 2017-01-25
    • 2013-04-03
    相关资源
    最近更新 更多