非常に簡単な手順であると思われる部分に苦労しています。JSON文字列をTSオブジェクトにデシリアライズ
"geolocate.ts"関数 "setData"では、モデルのインデックスは? "flightplan"と "config"は、 "model.flightplan"または "model.config"から参照されるときにChromeデバッガによって「未定義」と表示されます。 "モデル"オブジェクト自体は、デバッガで展開しても問題ないと思われます。
任意の考えやポインタを非常に高く評価されるだろう;)
geolocate.d.ts
export class FmsFlightPlan {
public status: string[];
...
}
export class Config {
public airportIcon: IconSettings;
...
}
export class InitModel {
public config: Config;
public flightplan: FmsFlightPlan;
}
geolocate.ts
import * as passedData from "./geoLocate.d";
let config: passedData.Config;
let flightPlan: passedData.FmsFlightPlan;
export function setModel(json: string): void {
console.log(json); // '{"Config": { "AirportIcon": {...} ...}, {"Flightplan": {"Status": [], ... } ...}' --- As expected (JSONlint OK)
const model: passedData.InitModel = JSON.parse(json);
console.log(model); // Chrome console: {Config: {…}, Flightplan: {…}}
flightPlan = model.flightplan; // flightPlan and config are assigned "undefined"
config = model.config; // "model" looks OK and Intellisense works.
flightplanDraw();
}
TSCはjavascriptのを生成
function setModel(o) {
console.log(o);
var e = JSON.parse(o);
console.log(e), flightPlan = e.flightplan, config = e.config, flightplanDraw()
}
.NETのコアビューJavascriptを
function gmapsReady() {
initMap();
$.getJSON("/Home/GetConfig",
null,
function(data) {
setModel(data);
});
}
.NET MVCコントローラ
public JsonResult GetConfig()
{
// Load fplan and config objects
...
...
InitModel initModel = new InitModel
{
Flightplan = fplan,
Config = _config
};
string json = JsonConvert.SerializeObject(initModel);
return new JsonResult(json);
}
'flightPlan = model.Flightplan'を試して、その名前が大文字と完全に同じであることを確認してください。 JS内のJSONは大文字と小文字を区別します( –
@ Helder De Baere:提案に感謝していますが、model.Flightplanを使用するとTSCコンパイルエラーが発生する(期待どおり) – JcMaltaDev
次に、私はあなたの「flightplan」の名前を変更することをお勧めしますInitModelを 'Flightplan'に設定し、Configにも適用します。それがうまくいかない場合は、おそらくJSONのモデルを解析する際に何か問題があります –