gpt4 book ai didi

extjs - 不在 extjs 中提供来自 Child 的关联父数据

转载 作者:行者123 更新时间:2023-12-04 05:14:45 27 4
gpt4 key购买 nike

希望你做得很好。

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

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

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

我的型号如下

User.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',
},

});

Diploma.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'
}]

});

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

Diploma.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');
}
}
}

});

User.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)

我什么也得不到。项目不包含任何...
我怎样才能从文凭中获得用户。

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

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。

上面提到的错误。

谢谢大家! :)

最佳答案

究竟是什么不起作用?您是否能够使用魔术方法,例如,User.diplomas() ?正如@VDP 所说,为协会创建的商店是一个正常的 Ext.data.Store范围为父模型的数据集(在本例中为用户)。也就是说,如果你有一个Userid 的模型的 1 ,调用方法 User.diplomas()将返回 Ext.data.Store过滤为仅包含 Diploma带有 user_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 中使用它们,则始终需要您的子模型
    关系。 **
  • 如果您想随意加载子项,请始终使用外键
  • 如果您以相同的方式返回子项,请始终使用 associationKey
    作为父级响应
  • 如果您愿意,可以同时使用外键和关联键
  • 始终命名您的 hasMany 关系
  • 在您的 hasMany 关系中始终使用完全限定的模型名称
  • 考虑给读者根一个有意义的名字(除了“数据”)
  • 子模型不需要belongsTo 关系
    hasMany 上类

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

    **为了简化并避免潜在的循环引用,您可以在 app.js 中要求它们

    图片来源:尼尔·麦圭根 ( http://www.blogger.com/profile/14122981831780837323)

    关于extjs - 不在 extjs 中提供来自 Child 的关联父数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14432119/

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