Я просмотрел и попытался несколько примеров по вызову функций синхронно, но, похоже, он не работает для меня. Я использую внешние шаблоны руля для генерации элемента «parent» html, загруженного данными, а затем после этого загружается, я хочу добавить html к нему из «дочерних» шаблонов, которые я создал (со своими собственными данными). Оба вызова функций вызывают одну и ту же функцию, но просто передаются в разных шаблонах/данных. Ниже приведен код, который у меня есть для этого - любая помощь приветствуется. Благодаря!Невозможно заставить эти две функции синхронно звонить
var loadSimpleCollection = function(templateFile, dataFile, containerSelector) {
var deferred = $.Deferred();
$.get(templateFile, function(text) {
// Extract HTML from the template file
var raw_template = text;
// Compile that into an handlebars template
var template = Handlebars.compile(raw_template);
// Retrieve the container where the data will be displayed
var container = $(containerSelector);
// Fetch collection data from JSON file
$.getJSON(dataFile, function(data, status, xhr) {
$.each(data,function(index,element){
var html = template(element);
container.append(html);
});
});
});
return deferred.promise();
}
loadSimpleCollection('template1.hbs', 'data1.json', '#parent-div').then(loadSimpleCollection('template1.hbs', 'data2.json', '#child-div'));
, вероятно, хотите, чтобы обернуть 'затем' выражение, в противном случае она вызывается немедленно. например '.then (function() {loadSimpleCollection (...)})' –
Вам нужно решить возвращенное обещание 'deferred.resolve()' после 'container.append (html);' –