gpt4 book ai didi

model - ExtJS 4 : Understanding hasMany and belongsTo

转载 作者:行者123 更新时间:2023-12-04 06:11:08 25 4
gpt4 key购买 nike

很长一段时间以来,我一直在努力理解如何使用 hasMany 和 belongsTo。我的理解是 hasMany 是 1:many 关系,belongsTo 是many:1 关系-- 旁白:那么这是否意味着如果你有一个 hasMany 关系,那么它的子模型中需要一个 belongsTo 呢?我已经阅读了几篇关于它的文章:

  • Ext.data.reader.Reader 上加载嵌套数据页。
  • Ext.data.association.BelongsTo
  • Ext.data.association.HasMany
  • Association Sample in extjs 4.2:
  • ExtJS Tutorials - HasMany article
  • ExtJS Tutorials - BelongsTo article
  • hasMany vs belongsTo
  • ExtJS 4: Models with Associations and Stores

  • 不过还是有点糊涂。假设我有以下数据:
    var data = {
    "config": {
    "name": "blah",
    "id": 1,
    "someconfig": [{
    "name": "Services", "tabs": [{
    "id": 0, "name": "Details", "layout": "hbox"
    }, {
    "id": 1, "name": "Sources", "layout": "hbox"
    }, {
    "id": 2, "name": "Paths", "layout": "hbox"
    }, {
    "id": 3, "name": "Ports", "layout": "hbox"
    }, {
    "id": 4, "name": "Levels", "layout": "hbox"
    }, {
    "id": 5, "name": "Notes", "layout": "hbox"
    }]
    }, {
    "name": "Services2", "tabs": [{}]
    }]
    }
    };

    我会为配置创建一个模型:
    Ext.define('Config', {
    extend: 'Ext.data.Model',
    fields: ['name'],
    hasMany: [{
    name: 'someconfig',
    model: 'Someconfig',
    associationKey: 'someconfig'
    }],
    proxy: {
    type: 'memory',
    data: data,
    reader: {
    type: 'json',
    root: 'config'
    }
    }
    });

    所以 Config 可以有很多 Someconfig,因为在数据中,someconfig 是一个对象数组。这是 Someconfig 模型:
    Ext.define('Someconfig', {
    extend: 'Ext.data.Model',
    fields: [
    'name'
    ],
    hasMany: [{
    name: 'tabs',
    model: 'Tabs',
    associationKey: 'tabs'
    }]
    });

    好的,同样的交易。 Someconfig 可以有很多选项卡,因为在数据中,选项卡是一个对象数组。这是 Tabs 模型:
    Ext.define('Tabs', {
    extend: 'Ext.data.Model',
    fields: [
    'id',
    'name',
    'layout'
    ],
    belongsTo: [{
    name: 'tabs',
    model: 'Someconfig',
    associationKey: 'tabs'
    }]
    });

    现在,belongsTo 在那里,因为我在搞乱这个属性。无论如何,我无法从 Someconfig 访问 Tabs,但我可以从 Config 访问 Someconfig。看看这段代码:
    Config.load(1, {
    success: function(record, operation) {
    console.log(record.get('name')); // works
    console.log(record.someconfig().getCount()); // works, gives me 2
    console.log(record.someconfig().data.items[0].data); // only prints out name and config_id
    // console.log(record.someconfig().tabs()); // doesn't exist
    }
    });

    jsFiddle : demo

    我想知道的是,我不应该可以访问 吗?标签() 来自 一些配置() ,还是我误解了这些关系?如果是前者,我将如何修复我的代码?

    来自 Sencha forums 的交叉发布.

    最佳答案

    您的方法有一些问题:

  • 当您调用 setter/getter 对于 一对多 关系,您实际上是在检索对 的引用存储对象 包含一组相关对象,因此尝试检索关系 标签 因为商店没有意义。
  • 您必须 检索一个元素 从关系存储,然后 获取其相关标签 调用 标签法这将返回一个包含该特定实例的一组选项卡的 Store 对象。
  • 如果你想要访问 任何相关标签 你必须再次选择单个对象 从那个商店,横穿整个关系树,你应该做这样的事情:

  • someconfig = record.someconfig().getAt(0);
    sometab = someconfig.tabs().getAt(0);


    这是 modified version of your code这样可行。
    希望它有助于解决您的问题。

    关于model - ExtJS 4 : Understanding hasMany and belongsTo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19572571/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com