希望你做得好。
我是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,但尚未提供网址。
请指导我。
感谢。
感谢您的回复.. @ 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,但尚未提供网址。
上述错误。
全部谢谢! :)
答案 0 :(得分:3)
究竟什么不起作用?您是否能够使用魔术方法,例如User.diplomas()
?正如@VDP所述,为Association创建的商店是一个正常Ext.data.Store
范围,用于父模型(在本例中为User)的数据集。也就是说,如果您的User
模型id
为1
,则调用方法User.diplomas()
将返回Ext.data.Store
过滤后仅包含Diploma
{1}} user_id
1
。
理解这一点非常重要! 如果您未在foreignKey
关联中指定hasMany
属性,则默认为所有者模型的小写名称加上“_id”,您应修改User
1}}模型的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
博客文章中的一些重要提示(如果链接在某个时刻死亡)
*商店将继承其模型的代理,您可以随时覆盖它
**为了简化并避免潜在的循环引用,您可以在app.js
中要求它们信用:Neil McGuigan(http://www.blogger.com/profile/14122981831780837323)