2012-09-21 15 views
8

W moich szablonów robie coś podobnegoKierownice szablonów i dynamiczne obrazy

<img class="someClass" src="{{imgURL}}"> 

Obrazy są ładowane prawidłowo, ale pojawia się ostrzeżenie, takie jak:

GET http://localhost:8888/%7B%imgURL%7D%7D 404 (Not Found) 

Czy istnieje sposób aby to naprawić?

+0

Czy szablon jest dołączany do strony, zanim zostanie przeanalizowany przez silnik szablonów? Jeśli tak, nie widzę żadnego obejścia. –

+0

Nie wierzę w to. Wykonuję wywołanie ajax, które łapie moje zewnętrzne szablony kierownicy. Buforuję te szablony, a później mam funkcję, która pobiera dane json i znajduje odpowiedni szablon do użycia jako źródło, a następnie kompiluję źródło i przekazuję dane json do tego skompilowanego szablonu. Czy jest coś w tej metodzie, która spowodowałaby te ostrzeżenia? – swallace

+0

To jest dziwne. Cóż, gdy utworzysz element obrazu ze źródłem, przeglądarka poprosi o próbę jego buforowania. Jeśli szablon jest analizowany jako ciąg, a następnie przetwarzany na elementy DOM, które nie powinny się zdarzyć. W każdym razie możesz zignorować tego rodzaju ostrzeżenie, po prostu informuje Cię, że żądany plik nie został znaleziony (to jest tuż przed zamianą źródła i ładuje się ponownie), zwykli użytkownicy końcowi nie mają otwartych konsol podczas przeglądania Twoja strona. '=]' –

Odpowiedz

10

mieć dwa problemy:

  1. Teraz brakuje zamykające cytat w <img> ale to nie jest wielka sprawa.
  2. Twój szablon jest przechowywany w ukrytym <div> lub podobnym elemencie zawierającym HTML.

Jeśli powiesz tak:

<div id="t" style="display: none"> 
    <img class="someClass" src="{{imgURL}}"> 
</div> 

przeglądarka zinterpretuje <img> jako prawdziwego obrazu i spróbuj załadować zasobu określonego w atrybucie src, to gdzie 404:

GET http://localhost:8888/%7B%imgURL%7D%7D 404 (Not Found) 

pochodzi z. Szablony są rzadko poprawne i prawidłowo uformowane w HTML, więc musisz uniemożliwić przeglądarce interpretowanie szablonu jako HTML. Zazwyczaj podejście jest przechowywanie szablonu w <script> z non-html type:

<script id="t" type="text/x-handlebars-template"> 
    <img class="someClass" src="{{imgURL}}"> 
</script> 

Wtedy można powiedzieć Handlebars.compile($('#t').html()) aby uzyskać skompilowany szablon i przeglądarka nie spróbuje zinterpretować treść #t jako HTML.

+0

Dzięki temu poprawiono moje ostrzeżenie. – swallace

3

Wiem, że jest późno, ale o to, jak to zrobić, co chcesz:

var view = Ember.View.create({templateName: 'myTemplate', myPicture: 'http://url_of_my_picture.png'}); 

view.appendTo('#myDiv'); 

<script type="text/x-handlebars" data-template-name="myTemplate"> 
    <img {{bindAttr src="myPicture"}}> 
</script> 
0

Okazało się, że za pomocą wsporników potrójne będzie działać dobrze.

<img src="{{{your source}}}" alt={{{your alt}}} /> 
+0

Pytanie zadano w 2012 roku, ponad 5 lat temu. Czy na pewno ta nowa odpowiedź ma zastosowanie do wersji 2012 pliku handebars.js? – sisve