2013-06-03 3 views
1

Я создал этот XML с помощью ExtJS:Как добавить атрибут XML в ExtJs?

<Entity><Fields><Field><value>1777</value></Field><id></id></Fields></Entity> 

Использование источника Ext.data.writer.XmlView.

Мой вопрос: что мне нужно сделать, чтобы добавить атрибут XML в одно из полей? Например:

< поля имя =»запрос-идентификатор»>

Просто для справки, это codef я использовал для записи XML в ExtJS:

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



}); 

ответ

1

Глядя на the code of the XML writer, кажется, что вы ничего не можете сделать, чтобы добиться этого со стандартным 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; 
    } 
}); 

После включения такого класса, можно использовать следующий писатель:

writer: { 
     writeRecordId: false, 
     type: 'aaxml', // changed to custom type 
     nameProperty: 'mapping', 
     writeAllFields: true, 
     documentRoot: "Entity", 
     record: "Fields", 
     recordAttributes: { 
      name: 'request-id' 
     } 
    } 
+0

Спасибо. он печатает мне атрибут XML! единственное, что отличается, - это то, что атрибут был напечатан на «Полях», а не на «Поле». но я исправил это с помощью функции переопределения. благодаря! – Yaniv

Смежные вопросы