Extjs 4.1 多对多模型关联

Posted

技术标签:

【中文标题】Extjs 4.1 多对多模型关联【英文标题】:Extjs 4.1 many-to-many model association 【发布时间】:2012-12-13 03:55:05 【问题描述】:

当我想创建多对多关联时,我遇到了一些问题。因为它不知道。我尝试以这种方式建立关系。但我不确定。任何人都可以帮助我吗?我该怎么做?。这是我的代码

Ext.define('Ext4Example.model.Category', 
extend    : 'Ext.data.Model',
alias     : 'widget.categoryModel',
idProperty: 'id',    
fields: [
    name:'id',              mapping:'id',                type:'int',
    name:'name',            mapping:'name',              type:'string'
],
proxy: 
    type: 'ajax',
    noCache: false,
    api: 
        create  : '$createLink(controller:'category', action: 'create')',
        read    : '$createLink(controller:'category', action: 'read')',
        update  : '$createLink(controller:'category', action: 'update')',
        destroy : '$createLink(controller:'category', action: 'destroy')'
    ,
    actionMethods: 
        create  : 'POST',
        read    : 'GET',
        update  : 'PUT',
        destroy : 'DELETE'            
    ,        
    reader: 
        type    : 'json',
        root    : 'data',
        totalProperty   : 'total',
        successProperty : 'success',
        messageProperty : 'message',
        implicitIncludes: true
    ,
    writer: 
      type      : 'json',
      root      : 'data',
      writeAllFields: true 
    ,
    simpleSortMode: true
,
hasMany: [model: 'Manufacturer', name: 'manufacturers']

);

第二个模型在这里

Ext.define('Ext4Example.model.Manufacturer', 
extend    : 'Ext.data.Model',
alias     : 'widget.manufacturerModel',
idProperty: 'id',    
fields: [
    name:'id',              mapping:'id',                type:'int',
    name:'name',            mapping:'name',              type:'string'
],
proxy: 
    type: 'ajax',
    noCache: false,
    api: 
        create  : '$createLink(controller:'manufacturer', action: 'create')',
        read    : '$createLink(controller:'manufacturer', action: 'read')',
        update  : '$createLink(controller:'manufacturer', action: 'update')',
        destroy : '$createLink(controller:'manufacturer', action: 'destroy')'
    ,
    actionMethods: 
        create  : 'POST',
        read    : 'GET',
        update  : 'PUT',
        destroy : 'DELETE'            
    ,        
    reader: 
        type    : 'json',
        root    : 'data',
        totalProperty   : 'total',
        successProperty : 'success',
        messageProperty : 'message',
        implicitIncludes: true
    ,
    writer: 
      type      : 'json',
      root      : 'data',
      writeAllFields: true 
    ,
    simpleSortMode: true
,
hasMany: [model: 'Category', name: 'categories']

);

【问题讨论】:

【参考方案1】:

首先,请描述什么不起作用? hasMany 关系创建的魔术方法在模型上不可用吗?调用魔术方法时是否没有加载数据?请进一步描述您遇到的问题。

也许您会发现这篇博文很有用? http://extjs-tutorials.blogspot.com/2012/05/extjs-hasmany-relationships-rules.html

博客文章中的一些重要提示(以防链接在某个时候失效)

    始终将代理放在模型中,而不是商店中,除非您有充分的理由不这样做 * 如果在 hasMany 关系中使用子模型,则始终需要它们。 ** 如果您想随意加载孩子,请始终使用 foreignKey 如果您在与父级相同的响应中返回子级,则始终使用 associationKey 如果你喜欢,你可以同时使用 foreignKey 和 associationKey 始终命名您的 hasMany 关系 始终在您的 hasMany 关系中使用完全限定的模型名称 考虑给阅读器根一个有意义的名称(“数据”除外) 子模型不需要为 hasMany 工作的 belongsTo 关系

*商店将继承其模型的代理,您可以随时覆盖它

**为方便起见,并避免潜在的循环引用,您可以在 app.js 中使用它们

图片来源:Neil McGuigan (http://www.blogger.com/profile/14122981831780837323)

【讨论】:

以上是关于Extjs 4.1 多对多模型关联的主要内容,如果未能解决你的问题,请参考以下文章

laravel 模型关联之(多对多)

laravel多对多关联模型

Flask/SQLAlchemy - 多对多关系的关联模型和关联表之间的区别?

Laravel 4.1 多对多关系和条件在哪里?

Hibernate的多对多关联关系

TP中的模型关联的多对多关系