2

希望你做得很好。

我是 extjs4 的新手,正在研究关联的示例。

我有 2 个不同的类用户和文凭,我已经定义了。

用户拥有许多文凭,而文凭属于用户

我的模型如下

用户.js

Ext.define('MyApp.model.User', {
    extend : 'Ext.data.Model',
    idProperty : 'userId',
    fields : [{
        name : 'userId',
        type : 'integer'
    }, {
        name : 'userName',
        type : 'string',

    }],

    hasMany : {
        model : 'MyApp.model.Diploma',
        name : 'diplomas',
    },

});

文凭.js

Ext.define('MyApp.model.Diploma', {
    extend : 'Ext.data.Model',
    idProperty : 'diplomaId',
    fields : [{
        name : 'diplomaId',
        type : 'integer'
    }, {
        name : 'diplomaName',
        type : 'string',
    }, {
        name : 'userId',
        type : 'integer'
    }],

    associations : [{
        model : 'MyApp.model.User',
        name : 'user',
        type : 'belongsTo'
    }]

});

===================== 我的店铺如下======================= =

文凭.js

Ext.define('MyApp.store.Diploma', {
    extend : 'Ext.data.Store',
    model : 'MyApp.model.Diploma',
    autoLoad : true,

    listeners : {
        'load' : {
            fn : function(store, records, success, operation) {
                console.log('Diplomas are loaded');
            }
        }
    }

});

用户.js

  Ext.define('MyApp.store.User', {
        extend : 'Ext.data.Store',
        model : 'MyApp.model.User',
        requires:['Ext.data.proxy.LocalStorage'],
        autoLoad : true,

        listeners : {
            'load' : {
                fn : function(store, records, success, operation) {
                    console.log('User is loaded');
                }
            }
        },

        data : [{
            userId : 1,
            userName : 'Rishabh Shah',
            diplomas:{
                userId : 1,
                diplomaId:1,
                diplomaName:'IT'
            }
        }, {
            userId : 2,
            userName : 'Rakesh Shah',
            diplomas:{
                userId : 2,
                diplomaId:2,
                diplomaName:'CE'
            }
        }, {
            userId : 3,
            userName : 'Rashmin Shah'
        }],

        proxy:{
            type:'memory',
            reader:{
                root:'data'
            }
        }
    });

我可以从这样的用户那里获得文凭并且可以获得结果

Ext.getStore("User").getAt(0).diplomasStore.getAt(0)

但是,当我尝试这样做时

Ext.getStrore("Diploma") or Ext.getStrore("Diploma").getAt(0)

我什么也得不到。items 不包含任何内容...如何从文凭中获取用户。

还有一件事..如果我不在我的文凭模型中编写代理..它给了我这样的错误..

Ext.data.proxy.Server.buildUrl():您正在使用 ServerProxy,但尚未为其提供 url。

请指导我。

谢谢。


感谢您的回复..@john..我可以从用户那里获得文凭..我想从文凭中获得用户...我自己尝试过..找到了解决方案...

我将有以下 json。

[
    {
        "depId": 1,
        "depName": "CE",
        "employees": [
            {
                "empId": 1,
                "firstName": "Rishabh",
                "lastName": "Shah"
            }, {
                "empId": 2,
                "firstName": "Smit",
                "lastName": "Patel"
            }
        ]
    }, {
        "depId": 2,
        "depName": "IT",
        "employees": [
            {
                "empId": 1,
                "firstName": "Parag",
                "lastName": "Raval"
            }, {
                "empId": 2,
                "firstName": "Rakesh",
                "lastName": "Prajapati"
            }
        ]
    }, {
        "depId": 3,
        "depName": "EE",
        "employees": [
            {
                "empId": 1,
                "firstName": "Parag EE",
                "lastName": "Raval EE"
            }, {
                "empId": 2,
                "firstName": "Rakesh EE",
                "lastName": "Prajapati EE"
            }
        ]
    }, {
        "depId": 4,
        "depName": "EC",
        "employees": [
            {
                "empId": 1,
                "firstName": "Parag EC",
                "lastName": "Raval EC"
            }, {
                "empId": 2,
                "firstName": "Rakesh EC",
                "lastName": "Prajapati EC"
            }
        ]
    }, {
        "depId": 5,
        "depName": "Chemial E",
        "employees": [
            {
                "empId": 1,
                "firstName": "Parag",
                "lastName": "Raval"
            }, {
                "empId": 2,
                "firstName": "Rakesh",
                "lastName": "Prajapati"
            }
        ]
    }, {
        "depId": 6,
        "depName": "ME",
        "employees": [
            {
                "empId": 1,
                "firstName": "Parag",
                "lastName": "Raval"
            }, {
                "empId": 2,
                "firstName": "Rakesh",
                "lastName": "Prajapati"
            }
        ]
    }, {
        "depId": 7,
        "depName": "Civil Engineer",
        "employees": [
            {
                "empId": 1,
                "firstName": "Parag",
                "lastName": "Raval"
            }, {
                "empId": 2,
                "firstName": "Rakesh",
                "lastName": "Prajapati"
            }
        ]
    }
]

我会model.getAssociatedData().user 根据我的要求使用

其中模型是我的子类记录,用户是我的父类..

我在我的文凭模型中使用了不需要的代理......所以,正在

Ext.data.proxy.Server.buildUrl():您正在使用 ServerProxy,但尚未为其提供 url。

上面提到的错误。

谢谢大家!:)

4

1 回答 1

3

究竟是什么不工作?您是否能够使用魔术方法,例如,User.diplomas()?正如@VDP 所述,为关联创建的存储是Ext.data.Store父模型(在本例中为用户)的数据集的正常范围。也就是说,如果你有一个带有of的User模型,调用该方法将返回一个过滤后的只包含带有 a的's 。id1User.diplomas()Ext.data.StoreDiplomauser_id1

理解这一点非常重要!如果您没有foreignKey在关联中指定属性hasMany,它将默认为所有者模型的小写名称加上“_id”,您应该修改User模型的hasMany关联,如下所示:

Ext.define('MyApp.model.User', {
/** Model Definition */
hasMany : {
    model : 'MyApp.model.Diploma',
    name : 'diplomas',
    foreignKey : userId /** This is what you're missing */
}
});

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

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

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

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

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

信用:尼尔麦圭根(http://www.blogger.com/profile/14122981831780837323

于 2013-01-30T18:01:52.070 回答