2012-05-07 100 views
2

我想加載一些JSON,其中存儲了大量有關兒科患者100種麻醉藥物的變量。Sencha Touch 2從嵌套JSON中讀取鍵和值的值

的實際值也會從患者的體重之前計算,年齡等:

例子:

var propofolInductionTitle = propofolName + ' ' + propofol0PercentConcentration + '- Induktion'; 
var propofol0InductionDosageMG = (Math.round(kg * 2 * 10)/10) + ' - ' + (Math.round(kg * 5 * 10)/10); 

我然後創建我的藥是JSON的由我所需要的變量,是後來的塊由計算值替換。我專門嘗試避免JSON中的字符串,以便在數學模塊中定義所有變量時更易於本地化爲英語和法語。

var hypnotikaJSON = { 
      "thiopentalTitle": [ 
       {"thiopentalBrandName": ""}, 
       {"vialContentTitle": "thiopentalVialContent"}, 
       {"solutionTitle": "thiopentalSolution"}, 
       {"concentrationTitle": "thiopentalConcentration"}, 
       {"dosageString": "thiopentalDosageString"}, 
       {"atWeight": "thiopentalDosageMG"}, 
       {"thiopentalAtConcentration": "thiopentalDosageML"} 
      ], 
      "propofolInductionTitle": [ 
       {"propofolInductionBrandName": ""}, 
       {"propofolVialContentTitle": "propofolInductionVialContent"}, 
       {"propofolSolutionTitle": "propofolSolution"}, 
       {"propofolConcentrationTitle": "propofolInductionConcentration"}, 
       {"propofolInductionDosageStringTitle": "propofolInductionDosageString"}, 
       {"atWeight": "propofolInductionDosageMG"}, 
       {"propofolAtInductionConcentration": "propofolInductionDosageML"} 
      ], 
      "propofolSedationTitle": [ 
       {"propofolSedationBrandName":""}, 
       {"propofolVialContentTitle":"propofolSedationVialContent"}, 
       {"propofolSolutionTitle":"propofolSolution"}, 
       {"propofolConcentrationTitle":"propofolSedationConcentration"}, 
       {"propofolSedationDosageStringTitle":"propofolSedationDosageString"}, 
       {"atWeight":"propofolSedationDosageMG"}, 
       {"propofolAtSedationConcentration":"propofolSedationDosageML"} 
      ], 
      "laryngealMaskTitle": [ 
       {"laryngealMaskSizeTitle":"laryngealMaskSize"}, 
       {"laryngealMaskCuffSizeTitle":"laryngealMaskCuffSize"}, 
       {"laryngealMaskBiggestETTTitle":"laryngealMaskBiggestETT"}, 
       {"laryngealMaskBronchoscopeSizeTitle":"laryngealMaskBronchoscopeSize"} 
      ] 
    }; 

我的具體需求是JSON閱讀器必須給我每個對象的關鍵AND值,因爲我需要填充模板。原因是這些藥物的領域各不相同。一些有額外的行政管理,所以我有另一個關鍵:價值對不同的藥物沒有。有些是作爲推注和每滴,有的沒有。所以沒有方便的json結構可能。 我發現rdougan here的答案是部分讓我做到這一點:

型號:

Ext.define('my.model.Drug', { 
     extend: 'Ext.data.Model', 
     config: { 
      fields: ['name', 'value'] 
     } 
    }); 

定製的Json讀者:

Ext.define('Ext.data.reader.Custom', { 
     extend: 'Ext.data.reader.Json', 
     alias: 'reader.custom', 
     getRoot: function (data) { 
      if (this.rootAccessor) { 
       data = this.rootAccessor.call(this, data); 
      } 

      var values = [], 
       name; 

      for (name in data) { 
       values.push({ 
        name: name, 
        value: data[name] 
       }); 
      } 

      return values; 
     } 
    }); 

商店:

var store = Ext.create('Ext.data.Store', { 
     fields: ['name', 'value'], 
     data: hypnotikaJSON, 
     autoLoad: true, 
     proxy: { 
      type: 'memory', 
      reader: { 
       type: 'custom' 
      } 
     } 
    }); 

面板:

this.viewport = new Ext.Panel({ 
     fullscreen: true, 
     layout: 'fit', 
     items: [{ 
      xtype: 'list', 
      itemTpl: '<p class="description">{name}</p><p class ="values">{value}</p>', 
      store: store 
     }] 
    }); 

不幸的是,我是一名醫生,沒有程序員,經過大量的閱讀,我無法找到適用於嵌套的JSON。自定義閱讀器似乎只能用於第一級。 我可以在沒有閱讀器的情況下做到這一點,如果沒有一家商店,每個條目都有很多計劃html,但已經證明非常慢,但是我希望在從Sencha Touch 1.1更新時避免它。而且這次更好地做到這一點。

請你指點一下解析這個醜陋的數據結構的方法嗎?

謝謝

+0

你能是關於你希望讀者的輸出是什麼?是不是像'name'和'value'嵌套在父'value'中?也許你可以解釋目的,或者告訴我們你想如何展示你的商店......我想知道的是爲什麼你爲內部項目([])而不是外部項目({})使用數組? – borck

+0

我的意思是,你使用數組作爲你的內部項目(「thiopentalTitle」:[...])而不是外部項目(hypnotikaJSON = {...})?如果您使用(hypnotikaJSON = [...]),則可能不需要自定義閱讀器... – borck

+0

感謝您考慮此問題。我試圖實現基本[這(圖片)](http://8apps.org/z_assets/images/screen03.png)。 – kreftt

回答

0

我不知道很多關於延長JSON讀者,所以只是猜測,但也許你應該重寫「讀」的方法?然後你可以按照你的意願去看看JSON

另外,如果你對JSON有控制權,你應該考慮改變它。
通常,JSON中的鍵應該在數組中的所有項目中都相同。
鍵不是數據,它們是元數據。
所以,如果你有不同藥物之間不同的屬性,那麼這樣的事情可能是一個解決辦法:

[{

名稱: '異丙酚1%',
性質:[

{title:'induction',value:'22 -56g'},
{標題: '鎮靜',值: '22'},

]},
{名稱: 'nextDrug'}
等。

相關問題