Достъп до рендериран обект при Mustache
Здравейте, цял ден си блъскам главата над един проблем и дори не знам как точно да формулирам въпроса си в гугъл. Имаме следната функция:
-
$.get('templates/editBook.html', function (template) {
-
var output = Mustache.render(template, book);
-
$(selector).append(output);
-
return selector;
-
})
-
.then(function (element) {
-
$(element).css("background-color", "red");
-
});
Функцията рендерира, каквото се иска от нея, слага една form в li. Проблемът идва после - искам в then да продължа да манипулирам апенднатия елемент. Как да стане това? Опитах да върна и selector, и output. Подава ми някакви JQuery елементи, мога да селектвам поделементи от тях даже, но не се поддават на манипулации. Сякаш програмата не разбира, че са част от ДОМ дървото. Та, въпросът ми е как да достъпя рендерирания обект за манипулация?
В конкретния случай и аз стигнах до този извод, но искам да разбера как става. Ще е полезно да знаем по принцип.
В случая не ти се получава, защото даваш .then на $.get(), а return-ваш от callback-а му. $.get() е асинхронна функция, която винаги връща изтегления html като текст - return-ването от неговия callback по никакъв начин не променя това. Ако все пак държиш да стане с .then, първо просто извикваш $.get() и закачаш за него .then() за обработването на върнатия html. Функцията, която ти обработва html накрая връща селектора и за нея закачаш друг .then().
Като цяло обаче е безсмислен този chaining на синхронен код. .then() се ползва когато искаш да изпълниш няколко асинхронни операции в определен ред.