我想加載一些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更新時避免它。而且這次更好地做到這一點。
請你指點一下解析這個醜陋的數據結構的方法嗎?
謝謝
你能是關於你希望讀者的輸出是什麼?是不是像'name'和'value'嵌套在父'value'中?也許你可以解釋目的,或者告訴我們你想如何展示你的商店......我想知道的是爲什麼你爲內部項目([])而不是外部項目({})使用數組? – borck
我的意思是,你使用數組作爲你的內部項目(「thiopentalTitle」:[...])而不是外部項目(hypnotikaJSON = {...})?如果您使用(hypnotikaJSON = [...]),則可能不需要自定義閱讀器... – borck
感謝您考慮此問題。我試圖實現基本[這(圖片)](http://8apps.org/z_assets/images/screen03.png)。 – kreftt