Loading...
Hristo_Penchev avatar Hristo_Penchev 389 Точки

Достъп до рендериран обект при Mustache

Здравейте, цял ден си блъскам главата над един проблем и дори не знам как точно да формулирам въпроса си в гугъл. Имаме следната функция:

 

  1. $.get('templates/editBook.html', function (template) {
  2.             var output = Mustache.render(template, book);
  3.             $(selector).append(output);
  4.             return selector;
  5.         })
  6.             .then(function (element) {
  7.                 $(element).css("background-color", "red");
  8.             });

 

Функцията рендерира, каквото се иска от нея, слага една form в li. Проблемът идва после - искам в then да продължа да манипулирам апенднатия елемент. Как да стане това? Опитах да върна и selector, и output. Подава ми някакви JQuery елементи, мога да селектвам поделементи от тях даже, но не се поддават на манипулации. Сякаш програмата не разбира, че са част от ДОМ дървото. Та, въпросът ми е как да достъпя рендерирания обект за манипулация? 

Тагове:
0
JavaScript Applications
a_rusenov avatar a_rusenov 1103 Точки

Има ли нужда последващата манипулация да е в .then? Можеш просто да си работиш със селектора след добавянето в DOM:

$.get('templates/editBook.html', function (template) {
    var output = Mustache.render(template, book);
    
    $(selector).append(output);
    $(selector).css("background-color", "red");
});

 

 

1
25/04/2015 20:30:29
Hristo_Penchev avatar Hristo_Penchev 389 Точки

В конкретния случай и аз стигнах до този извод, но искам да разбера как става. Ще е полезно да знаем по принцип.

0
a_rusenov avatar a_rusenov 1103 Точки

В случая не ти се получава, защото даваш .then на $.get(), а return-ваш от callback-а му. $.get() е асинхронна функция, която винаги връща изтегления html като текст - return-ването от неговия callback по никакъв начин не променя това. Ако все пак държиш да стане с .then, първо просто извикваш $.get() и закачаш за него .then() за обработването на върнатия html. Функцията, която ти обработва html накрая връща селектора и за нея закачаш друг .then().

$.get('templates/editBook.html')
.then(function(html) {
    // ...Process HTML
    
    return selector;
})
.then(function(selector) {
    // ...Process selector
});

Като цяло обаче е безсмислен този chaining на синхронен код. .then() се ползва когато искаш да изпълниш няколко асинхронни операции в определен ред.

1
25/04/2015 20:57:08
AleksandurSeferinkin avatar AleksandurSeferinkin 333 Точки

Пример.

Всъщност .then() е много полезна функция и се ползва в случаи като в примера. Wrap-ваш заявката във функция и връщаш нов promise. 

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.