2012-05-07 14 views
2

JSONを読み込もうとしていますが、小児患者のために100種類の麻酔薬に関する多くの変数を保存しています。Sencha Touch 2はネストされたJSONのキーAND値から値を読み込みます

実際の値は、患者の体重、年齢などから前に計算されます。:

例:

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構造は不可能です。

モデル:

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' 
      } 
     } 
    }); 

私は、部分的に私はちょうどそれをすることができrdougan hereことで答えを見つけましたパネル:

残念なことに私は医師でプログラマーではなく、多くの読書をした後、これをネストしたJSONに適用することはできません。カスタムリーダーは、最初のレベルにしか向かないようです。 読者がいなくても、各エントリーのまわりにたくさんの計画HTMLがある店がなくても、非常に遅いことが判明しましたので、Sencha Touch 1.1からの更新中は避けたいと思います。今度はそれをもっとうまくやってください。

この醜いデータ構造を解析する方法を教えてください。

あなたは

+0

あなたは可能でしたあなたが読者の出力をどんなものにしたいと思うかについて少し具体的なのでしょうか?親の '価値'にネストされた '名前'や '価値'のようなものでしょうか?たぶんあなたは目的を説明するか、店舗をどのように表示したいのかを教えてもらえますか...私は、あなたの内側のアイテム([])と外側のアイテム({})の配列を使用しない理由は何ですか? – borck

+0

つまり、内部アイテム(「thiopentalTitle」:[...])に配列を使用し、外側のアイテム(hypnotikaJSON = {...})では配列を使用しませんか?代わりに(hypnotikaJSON = [...])を使用した場合、カスタムリーダーが必要ないかもしれません... – borck

+0

それを考えていただきありがとうございます。私が達成しようとしているのは基本的に[this(image)](http://8apps.org/z_assets/images/screen03.png)です。 – kreftt

答えて

0

私はちょうど推測ので、JSONリーダーを拡張について多くを知らないありがとう、しかし、多分あなたは「読み取り」メソッドをオーバーライドなっていますか?次に、JSONをあなたが望む通りに移動することができます

また、JSONを制御できる場合は、JSONを変更することを検討する必要があります。
通常、JSONのキーは配列内のすべてのアイテムで同じにする必要があります。
キーはデータではなく、メタデータです。あなたが異なる薬剤間で異なる特性を持っている場合
ので、このような何かが解決策になるかもしれません:

[{

名: 'プロポフォール1%'、
特性:[

{タイトル: '誘導'、値:'22の-56g '}、
{タイトル: '鎮静'、値 '22'}など、

]}、{
名: 'nextDrug'}
など。

関連する問題