2013-06-03 170 views
1

我創建使用ExtJS的這個XML:如何在ExtJs中添加XML屬性?

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

使用Ext.data.writer.XmlView源。

我的問題是 - 我需要做什麼才能將XML屬性添加到其中一個字段? 例如:

<場名稱=」請求ID」>

僅供參考,這是我以前寫的ExtJS的XML中的codef:

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