私はTVML/TVJSアプリで作業しています.Javascriptでクラスを操作するときに問題が発生しました。コールバックの実行時にJSクラス内の関数へのアクセスが失われる
class ResourceLoader {
getHomeScreen() {
var homeData = BASEURL + "/home.json";
var homeTemplate = BASEURL + "/home.tvml";
this.getRemoteJSON(homeData, homeTemplate, this._jsonLoaded);
}
_jsonLoaded(template, jsonString) {
var parsedJSON = JSON.parse(jsonString);
this.getRemoteXMLFile(template, parsedJSON);
}
getRemoteJSON(file, template, callback) {
var xhr = new XMLHttpRequest();
xhr.responseType = "text";
xhr.addEventListener("load", function() {
callback(template, xhr.responseText);
}, false);
xhr.open("GET", file, true);
xhr.send();
}
getRemoteXMLFile(template, json) {
var xhr = new XMLHttpRequest();
xhr.responseType = "xml";
xhr.addEventListener("load", function() {
loadRemoteFile(xhr.responseText, json);
}, false);
xhr.open("GET", template, true);
xhr.send();
}
}
(BASEURLは、アプリケーションで定義されたグローバル変数です:
マイ開始application.jsファイルには、私は次のようにResourceLoader.jsと呼ばれる別のファイルを持っている機能
resourceLoader = new ResourceLoader();
resourceLoader.getHomeScreen();
呼び出します。 js)
最初はすべてうまく動作します。 getHomeScreen()が呼び出されると、getRemoteJSON()を呼び出し、_jsonLoaded()をコールバックとして渡します。 getRemoteJSONはAJAX呼び出しを行い、コールバックを実行します。ここで問題が発生します。一度_jsonLoadedの中で "this"が定義されていないので、this.getRemoteXMLFileを呼び出すと、 "未定義はオブジェクトではありません(this.getRemoteXMLFile 'を評価しています)"
なぜgetHomeScreen ()ではなく、_jsonLoaded()ではありませんか? _jsonLoaded()からgetRemoteXMLFile関数にアクセスするにはどうすればよいですか?
ありがとうございました。