如何在ExtJs中添加XML属性?
我使用ExtJs创建了这个XML:如何在ExtJs中添加XML属性?,extjs,Extjs,我使用ExtJs创建了这个XML: <Entity><Fields><Field><value>1777</value></Field><id></id></Fields></Entity> 1777 使用Ext.data.writer.XmlView源代码 我的问题是-为了向其中一个字段添加XML属性,我需要做什么? 例如: 仅供参考,这是我用来在ExtJS中编写XML
<Entity><Fields><Field><value>1777</value></Field><id></id></Fields></Entity>
1777
使用Ext.data.writer.XmlView源代码
我的问题是-为了向其中一个字段添加XML属性,我需要做什么?
例如:
var proxy1 = new Ext.data.proxy.Rest({
url : url,
pageParam: undefined,
limitParam: undefined,
sortParam: undefined,
startParam: undefined,
noCache: false,
appendId: false,
reader : {
type : 'json',
root : 'entities'
},
headers: {
"Content-Type": "application/xml"
},
actionMethods: {
read: "POST"
},
writer: {
writeRecordId: false,
type: 'xml',
nameProperty: 'mapping',
writeAllFields: true,
documentRoot: "Entity",
record: "Fields"
}
});
var model = Ext.define('Entity', {
extend: 'Ext.data.Model',
fields: [
{name: 'Field', type: 'string'}
]
});
var store = Ext.create('Ext.data.Store', {
autoLoad: true,
autoSync: true,
proxy: proxy1,
model: 'Entity',
data : [
{'Field': '<value>1777</value>' }
]
});
var proxy1=new Ext.data.proxy.Rest({
url:url,
pageParam:未定义,
limitParam:未定义,
排序图:未定义,
起始图:未定义,
诺卡奇:错,
appendId:false,
读者:{
键入:“json”,
根:“实体”
},
标题:{
“内容类型”:“应用程序/xml”
},
行动方法:{
读:“帖子”
},
作者:{
书面记录:错误,
键入:“xml”,
nameProperty:'映射',
writeAllFields:对,
documentRoot:“实体”,
记录:“字段”
}
});
var model=Ext.define('实体'{
扩展:“Ext.data.Model”,
字段:[
{name:'Field',type:'string'}
]
});
var store=Ext.create('Ext.data.store'{
自动加载:对,
自动同步:对,
代理:proxy1,
模型:“实体”,
数据:[
{'Field':'1777'}
]
});
看看,使用标准XML编写器似乎无法实现这一点。您必须扩展或覆盖其writeRecord
方法
举个例子,你可以这样做:
Ext.define('AttributeAwareXmlWriter', {
extend: 'Ext.data.writer.Xml'
,alias: 'writer.aaxml'
,writeRecords: function (request, data) {
var me = this,
xml = [],
i = 0,
len = data.length,
root = me.documentRoot,
record = me.record,
recordAttributes = me.recordAttributes,
needsRoot = data.length !== 1,
item,
key;
// may not exist
xml.push(me.header || '');
if (!root && needsRoot) {
root = me.defaultDocumentRoot;
}
if (root) {
xml.push('<', root, '>');
}
for (; i < len; ++i) {
item = data[i];
xml.push('<', record);
if (recordAttributes) {
for (key in recordAttributes) {
xml.push(' ', key, '="', recordAttributes[key], '"');
}
}
xml.push('>');
for (key in item) {
if (item.hasOwnProperty(key)) {
xml.push('<', key, '>', item[key], '</', key, '>');
}
}
xml.push('</', record, '>');
}
if (root) {
xml.push('</', root, '>');
}
request.xmlData = xml.join('');
return request;
}
});
现在看来,使用标准XML编写器似乎无法实现这一点。您必须扩展或覆盖其writeRecord
方法
举个例子,你可以这样做:
Ext.define('AttributeAwareXmlWriter', {
extend: 'Ext.data.writer.Xml'
,alias: 'writer.aaxml'
,writeRecords: function (request, data) {
var me = this,
xml = [],
i = 0,
len = data.length,
root = me.documentRoot,
record = me.record,
recordAttributes = me.recordAttributes,
needsRoot = data.length !== 1,
item,
key;
// may not exist
xml.push(me.header || '');
if (!root && needsRoot) {
root = me.defaultDocumentRoot;
}
if (root) {
xml.push('<', root, '>');
}
for (; i < len; ++i) {
item = data[i];
xml.push('<', record);
if (recordAttributes) {
for (key in recordAttributes) {
xml.push(' ', key, '="', recordAttributes[key], '"');
}
}
xml.push('>');
for (key in item) {
if (item.hasOwnProperty(key)) {
xml.push('<', key, '>', item[key], '</', key, '>');
}
}
xml.push('</', record, '>');
}
if (root) {
xml.push('</', root, '>');
}
request.xmlData = xml.join('');
return request;
}
});
谢谢它给我打印了一个XML属性!唯一不同的是属性打印在“字段”上,而不是“字段”上。但我用覆盖功能解决了这个问题。谢谢谢谢它给我打印了一个XML属性!唯一不同的是属性打印在“字段”上,而不是“字段”上。但我用覆盖功能解决了这个问题。谢谢