我正在尝试使用单个数据库条目创建模型,而不是仅为一行创建商店......没有意义。无论如何,我可以使用static load method创建模型,但我模型的代理的URL是动态的,所以这不是一个选项,因为我想只是动态加载。此外,创建模型的实例似乎不起作用,因为我不能使用load方法,因为它是静态的......
我已经开始尝试使用Ajax调用来获取数据,然后将其加载到模型的实例中,但是即使普通字段值存在,关联关系也似乎无法创建。这就是我想要做的事情:
代码
// SectionsModel
Ext.define('SectionsModel', {
extend: 'Ext.data.Model',
fields: ['name']
});
// MY_MODEL
Ext.define('MY_MODEL', {
extend: 'Ext.data.Model',
fields: ['name', 'id'],
hasMany: [{
associationKey: 'sections', name: 'getSections', model: 'SectionsModel'
}],
proxy: {
type: 'memory',
reader: {
type: 'json',
root: 'configuration'
}
}
});
var url = 'my/url';
Ext.Ajax.request({
url: url,
method: 'GET',
scope: this,
success: function(res) {
var configObj = Ext.decode(res.responseText);
var configModel = Ext.create('MY_MODEL', configObj);
console.log(configModel);
},
failure: function(res) {
console.error('failed');
}
});
响应
{
"code": 200,
"configuration": {
"name": "TestConfiguration",
"id": 1,
"sections": [{
"name": "section1"
}, {
"name": "section2"
}]
}
}
上面的代码是我为此示例编写的虚拟代码...如果它不起作用,请将其视为伪代码。就像我说的那样,当我使用静态load method时它确实有效,并且我可以成功地进行Ajax调用......问题是如何使用给定数据创建模型。我是否需要将 config 传递给模型的构造函数,并将模型的代理数据设置为传入 config ?这是正确的协议吗?我只想在这里找出最好的方法。谢谢!
从Sencha forums交叉发布。
答案 0 :(得分:1)
我得到了一个解决方案,感谢Mitchell Simoens的一个blog post。我改变了MY_MODEL看起来像这样:
Ext.define('MY_MODEL', {
extend: 'Ext.data.Model',
fields: ['name', 'id'],
hasMany: [{
associationKey: 'sections', name: 'getSections', model: 'SectionsModel'
}],
constructor: function(data) {
this.callParent([data]);
var proxy = this.getProxy();
if (proxy) {
var reader = proxy.getReader();
if (reader) {
// this function is crucial... otherwise, the associations are not populated
reader.readAssociated(this, data);
}
}
},
proxy: {
type: 'memory',
reader: {
type: 'json'
}
}
});
// in the success of the Ajax call
success: function(res) {
var configObj = Ext.decode(res.responseText);
var configModel = Ext.create('MY_MODEL', configObj.configuration);
console.log(configModel);
}