2013-03-19 5 views
5

mam dla pętli, że chcę się widok szablonu w:szablon Ostrze Metor rzuca „drugi kamień milowy w tej samej gałęzi” wyjątek w pętli for

table.blade:

#game 
    h1= table.name 
     -if(table.playerSitting()) 
      a.btn.btn-danger.stand(href="#") Stand 
    #table 
     -for (var i=0; i<7;i++) 
      include 'seat' exposing i 

siedziska. ostrze:

- id = 'p' + (i+1) 
    div(id="#{id}") 
     -if (table.hasAt(i)) 
      p= table.usernameAt(i) 
     -else 
      -if(!table.playerSitting()) 
       a.btn.btn-inverse.sit(href="#", data-key="#{i}") Sit 
      -else 
       p &nbsp; 

Po pierwszym załadowaniu widoku wszystko rysuje się dobrze. Ale jeśli siedzą lub stoją, lub udać się do innego stolika, otrzymuję to:

Exception from Deps recompute: Error: Can't create second landmark in same branch 
    at /home/thomporter/meteor/blackjack/views/table.blade:8:4 

6 |  #table 
7 |   -for (var i=0; i<7;i++) 
8 >    include 'seat' exposing i 
9 |  
10 |  

I rysunek mogę rozwiązać ten problem poprzez stworzenie „siedzenia” kolekcję, która przechowuje identyfikator użytkownika & identyfikatory stole, ale to wydaje się głupie . Obecnie używam właściwości tablicy tabeli "gracze", indeks 0-6 dla każdego miejsca ... przynajmniej taki jest pomysł. =)

Powinienem również wspomnieć Wymieniłem seat.blade z:

p hi 

i bez powodzenia, samych zagadnień.

Wszelkie pomysły?

Edit
Informacje o wersji: wersja
Meteoryt 0.4.9
Meteor wersja 0.5.9 (git checkout)
Blade 3.0.3

+0

Muszę zapytać ... w jakiej wersji Meteoru pracujesz? Jaką wersję Blade? I czy "table.blade" lub jakiekolwiek szablony rodziców zawierają [deklaracje blokowe] (https://github.com/bminer/node-blade#blocks)? Powinienem też wspomnieć, że możesz tutaj utworzyć problem: https://github.com/bminer/node-blade/issues – BMiner

+0

Używam wersji Meteorite 0.4.9 i Meteor wersji 0.5.9. Blade jest 3.0.3, zgodnie z jego package.json w moim ~/.meteorite folder ... –

+0

Ponadto, nie ma bloków w szablonach ... wszystkie zwykłe pliki .blade w views/... –

Odpowiedz

3

Ten błąd jest faktycznie wynikiem zastosowania plain- stary dla pętli zamiast z pętli foreach.

Region foreach jest korzystniejsze niż ... [regularne pętli] nie tylko ze względu na czytelność i zwięzłości, ale również dlatego, że zapewnia Blade ze zdolnością do lepszej integracji z aktywnej stronie aktualizujących silników (konkretnie Meteor i Spark). Oznacza to, że jeśli mechanizm aktualizacji strony na żywo obsługuje reaktywne kolekcjonowanie śledzące, może wystąpić najbardziej wydajna operacja DOM , aby zaktualizować wyniki widoku w miejscu, bez konieczności ponownego renderowania całego szablonu Blade w postaci .

W Twoim przypadku Spark nie może ponownie renderować dołączonych szablonów z powodu dopasowania gałęzi do tego samego punktu orientacyjnego. Jeśli użyjesz foreach, problem zostanie rozwiązany.

Jednak w niektórych sytuacjach (takich jak twoje) foreach nie jest właściwe. Myślę, że rozwiązaniem jest tutaj utworzenie składni "regularnej pętli for" w Blade do obsługi pętli. Z tego powodu stworzyłem issue # 157.

+1

Jesteś niesamowity! –

Powiązane problemy