2009-09-24 17 views
16

, benim şablonunda aşağıdaki satırları olmasını istiyorum diğeri veya tek bir çok satırlı blok olarak okunurlar.Çoklu çok hatlı HAML blokları haml için (kasıtlı) garip çok satırlı biçimini kullanarak

-# This fails: 
= call_to_helper :foo1 => 'bar1', :foo2 => 'bar2', :foo3 => 'bar3', | 
    :foo4 => 'bar4', :foo5 => 'bar5' | 
= call_to_helper :foo1 => 'bar1', :foo2 => 'bar2', :foo3 => 'bar3', | 
    :foo4 => 'bar4', :foo5 => 'bar5' | 

Ve satır sonu ile ayırarak ilginçtir ki, daha iyi yapar:

-# This fails, too: 
= call_to_helper :foo1 => 'bar1', :foo2 => 'bar2', :foo3 => 'bar3', | 
    :foo4 => 'bar4', :foo5 => 'bar5' | 

= call_to_helper :foo1 => 'bar1', :foo2 => 'bar2', :foo3 => 'bar3', | 
    :foo4 => 'bar4', :foo5 => 'bar5' | 
buldum

tek çalışan çözüm arasında Yakut kod boş satır çalıştırmaktır. Hangi gerçekten çirkin görünüyor.

= call_to_helper :foo1 => 'bar1', :foo2 => 'bar2', :foo3 => 'bar3', | 
    :foo4 => 'bar4', :foo5 => 'bar5' | 
- 
= call_to_helper :foo1 => 'bar1', :foo2 => 'bar2', :foo3 => 'bar3', | 
    :foo4 => 'bar4', :foo5 => 'bar5' | 

Daha iyi bir şey var mı?

+5

** Güncelleme: ** borular haml en son sürümünde gerekli değildir Bu yüzden şu anda bu soruya takılıp kalmıyorsanız;) – Matchu

cevap

22

Bu özellik, bir hatasıdır. Haml çok satırlı blokları kasıtlı olarak kasıtsızdır - birbiri ardına takip etmek zor - neredeyse her zaman Ruby kodunu bir yardımcıya koymak daha iyidir. Yardımcı sadece bir kez çağrılsa bile, şablonunuzu okumayı daha kolay hale getirir. Örneğin: En Haml içinde Sonra

def blatz_link 
    call_to_helper :foo1 => 'bar1', :foo2 => 'bar2', :foo3 => 'bar3', 
    :foo4 => 'bar4', :foo5 => 'bar5' 
end 

def blootz_link 
    call_to_helper :foo1 => 'bar1', :foo2 => 'bar2', :foo3 => 'bar3', 
    :foo4 => 'bar4', :foo5 => 'bar5' 
end 

, sadece çok daha okunabilir ve anlaşılması daha kolay olacaktır

= blatz_link 
= blootz_link 

yok.


kesinlikle diğeriyle satırlı bloğunu uymalı, sadece arada bir yorum eklemek: Burada sözü edilmiş gibi aynı sorunları ve geçici çözümler karşılaştığınız

= call_to_helper :foo1 => 'bar1', :foo2 => 'bar2', :foo3 => 'bar3', | 
    :foo4 => 'bar4', :foo5 => 'bar5' | 
-# 
= call_to_helper :foo1 => 'bar1', :foo2 => 'bar2', :foo3 => 'bar3', | 
    :foo4 => 'bar4', :foo5 => 'bar5' | 
+0

İlk olarak direndim ama sonunda tüm bağlantılarla o kadar hanımefendi (özellikle personel alanında, diğer modellerin bir tonunu yönetmek için "Daha Fazla" açılır), ve ben sadece kodu bıraktım ve yeniden yapılandırdım yönetilebilir olmak. Teşekkürler :) – Matchu

2

Bu bir kesmek (tür), ancak zincirdeki 2., 3. vb. Satırlarda her zaman "=" yerine "+" kullanabilirsiniz.

= call_to_helper :foo1 => 'bar1', :foo2 => 'bar2', :foo3 => 'bar3', | 
    :foo4 => 'bar4', :foo5 => 'bar5' | 
+ call_to_helper :foo1 => 'bar1', :foo2 => 'bar2', :foo3 => 'bar3', | 
    :foo4 => 'bar4', :foo5 => 'bar5' | 
+0

Haha, zeki. Ortada sıkışmış bazı rasgele çizgilerden kesinlikle daha güzel: P – Matchu

+0

Daha hoş değil, çünkü bu ya güzel olur. Bu sadece daha az ortalama. İşte bu yüzden sözünü ettiğim tüm projeler için nodejs kullanıyorum. – Funkodebat

+0

Benim durumumda problem blokları '=' değil '%' değildi, bu yüzden bu benim için işe yaramıyor. – Nakilon

3

Sen mantıklı ne olursa olsun, sonuçta sizin yardımcı bir blok kullanabilirsiniz. senin Haml üzerinde Şimdi

module SomeHelper 
    def call_to_helper 
    foo = Foo.new 
    yield foo 
    # build your html here, using the foo object's attributes 
    end 

    class Foo 
    attr_accessor :foo1, :foo2, :foo3, :foo4, :foo5 
    end 

end 

:

= call_to_helper do |foo| 
    -foo.foo1 = 'bar1' 
    -foo.foo2 = 'bar2' 
    -foo.foo3 = 'bar3' 
    -foo.foo4 = 'bar4' 
    -foo.foo5 = 'bar5' 

= call_to_helper do |foo| 
    -foo.foo1 = 'bar1' 
    -foo.foo2 = 'bar2' 
    -foo.foo3 = 'bar3' 
    -foo.foo4 = 'bar4' 
    -foo.foo5 = 'bar5' 
8

ve garip (ve evet, garip) HAML'ın çok satırlı bloklarla ilgili davranışı beni birkaç kez ısırdı. Bunun kasıtlı olduğunu ve muhtemelen kullanıcının kodunun daha kolay okunmasını sağlamak için zorlandığını biliyorum. Ancak, kod geliştirmeye gelince her geliştiricinin kendi tercihleri ​​olduğu bilinen bir gerçektir. HAML, (c, C++, ruby, python, HTML, vb.) Bildiğim tek dildir ve bu tür kısıtlamaları empoze etmeye çalışır.

Bir hatadan ziyade bir özelliği tuhaf çok satırlı işlemenin çağrılması, hatalı bir dil tasarımını gösterir. Sonunda her zaman kullanıcının gözünde bir hata olacaktır. Çok satırlı destek, herhangi bir ana akış dilinin temel bir özelliğidir ve bu özelliğin eksik olması sadece düz bir can sıkıcıdır - aynı zamanda kullanıcıyı yönlendirmek için bir girişim olduğuna inandığım M $ ataç gibi.

HAML, HTML yazmak için fevkalade kompakt ve kullanışlı bir dildir.Çok-satırlı blokları tercih edenler (en azından), en az çok satırlı blok desteğini etkinleştirmek/devre dışı bırakmak için en azından bir çeşit konfigürasyon seçeneği sunulmasını isterlerdi - dil tasarımcısının kişisel okuması ne olursa olsun "okunması kolay kod" ". Biz oraya kadar

, biz kullanarak dile geçici gerekecek sanırım "- #" kesmek ...

+0

Acaba kimse bunun için çatal ısırdı mı .. –