Ich bin auf diese Frage gestoßen, die nach acco sucht mplish das gleiche, und wurde inspiriert von @ JasonJerrett Antwort, aber fand es, weil in meinem Fall ein bisschen fehlt ich eine XML-Vorlage wie dies in Javascript gebaut bin mit:
// Index.xml.js
var Template = function() {
return `very long xml string`;
};
Das Problem ist, dass man nicht Führen Sie die XHR-Anforderung in der Vorlage selbst aus, da die Vorlagenzeichenfolge zurückgegeben wird, bevor die XHR-Anforderung tatsächlich abgeschlossen wird (es gibt keine Möglichkeit, Daten aus einem asynchronen Callback zurückzugeben).Meine Lösung war es, die Ressourcenlader und führen Sie die XHR Anfrage dort, vor dem Aufruf der Vorlage und Weitergabe der Daten in die Template-Funktion zu ändern:
ResourceLoader.prototype.loadResource = function(resource, dataEndpoint, callback) {
var self = this;
evaluateScripts([resource], function(success) {
if (success) {
// Here's the magic. Perform the API call and once it's complete,
// call template constructor and pass in API data
self.getJSON(dataEndpoint, function(data) {
var resource = Template.call(self, data);
callback.call(self, resource);
});
} else {
var title = "Failed to load resources",
description = `There was an error attempting to load the resource. \n\n Please try again later.`,
alert = createAlert(title, description);
Presenter.removeLoadingIndicator();
navigationDocument.presentModal(alert);
}
});
}
// From: https://mathiasbynens.be/notes/xhr-responsetype-json
ResourceLoader.prototype.getJSON = function(url, successHandler, errorHandler) {
var xhr = new XMLHttpRequest();
xhr.open('get', url, true);
xhr.onreadystatechange = function() {
var status;
var data;
if (xhr.readyState == 4) {
status = xhr.status;
if (status == 200) {
data = JSON.parse(xhr.responseText);
successHandler && successHandler(data);
} else {
errorHandler && errorHandler(status);
}
}
};
xhr.send();
};
Dann wird die Template-Funktion muss geändert werden, um die eingehenden zu akzeptieren API-Daten als Parameter:
// Index.xml.js
var Template = function(data) {
return 'really long xml string with injected ${data}';
};
hast du es in TVJS, tvOS versucht? – user3378649
Ist es möglich, AngularJS in das TVML-Projekt zu integrieren? Und verwenden Sie den AngularJS $ http-Dienst, um die JSON-Daten abzurufen, und verwenden Sie dann ng-repeat, um die Vorlage zum Generieren der XML-Zeichenfolge dynamisch zu rendern? Nicht wirklich gut bei vaillia JS oder jQuery. Ich werde jemanden lieben, der direkt auf die Verwendung von AngularJS und TVOS verweist! –
@HughHou Hast du herausgefunden, dass das möglich war? –