我想读取extjs数据存储的特定值并在本地操作它。响应xml如下所示:
<user><name>abc</name><surname>def</surname><book><bname>book1</bname></book></user>
我的商店将只有一个用户条目时,收到响应,我想读取'bname'的值。到目前为止,我已经尝试了两种方法,都给错误。
方法1:
Ext.define('user', {
extend: 'Ext.data.Model',
fields: [ 'name', 'surname'],
hasMany: {model: 'Book', name: 'book'},
proxy: {
type: 'rest',
url : request,
reader: { type: 'json', root: 'user'}
}
});
Ext.define('Book', {
extend: 'Ext.data.Model',
fields: [ 'name'],
belongsTo: 'user'
});
var userstore = Ext.create('Ext.data.Store', {
model: "user"
});
incidentstore.load({
callback: function() {
var inc = userstore.first();
var bk = inc.getBook();
console.log(dev.get('bname'));
}
});
运行上述代码时出现“Ext.define不是函数”错误。
方法二:
var proxy1 = new Jx.JxHttpProxyRest({
url: request,
api : {
read : { headers : { 'Accept' : APP + '.abc.def.usermanage.user+json;version=1' } }
}
});
var reader = new Ext.data.XmlReader( {
rootProperty : 'user',
record : 'book',
id : 'id',
}, [{ name : 'bname', mapping : 'book > bname'} ]);
var writer = new Ext.data.XmlWriter( {
encode : false
});
var newstore = new Ext.data.Store( {
id : 'book',
restful : true,
proxy : proxy1,
remoteSort : true,
reader : reader,
writer : writer,
autoload: true,
listeners: {
load: function() {
console.log(newstore.data.first());
}
}
});
Ext.data.DataProxy.addListener('load', function(proxy, type, action, options, res) {
console.log(res.responseText);
});
newstore.load( {
params : { start : 0, limit : myPageSize },
});
以上代码在控制台上不显示任何内容。
我是extjs的新手,不知道如何从响应中访问“bname”值。如果有人能帮助我,那就太好了
5条答案
按热度按时间bq3bfh9z1#
看看这个:
或者查看此处的工作代码:http://jsfiddle.net/lontivero/HTj5Q/
但是,如果你的商店"总是"只有一条记录,那么你就不应该使用商店,你应该使用一个模型并加载该模型。
更新:
好的,如果你使用extjs 3.1.1(最好在此之前提供这些重要信息),你可以按如下方式操作:
zxlwwiss2#
下面的代码对我有用:
aiqt4smr3#
您使用的是Ext版本4代码,但您的库是3.1.1
除非您将库升级到版本4,否则它将无法工作。
qc6wkl3g4#
要使Lontivero示例完整,使用findRecord方法查找特定键上的记录也很有用。如下面的示例所示(基于lontivero示例),它将只获取第一个找到的记录。因此,如果您使用具有唯一键的存储,这将非常有用。
您可以在以下位置查看此示例:http://jsfiddle.net/jvandemerwe/dGUGb/25/
iovurdzv5#