jQuery şablonlama motorları [kapalı]


204

İstemci tarafını kullanmak için bir şablon motoru arıyorum. Ben jsRepeater ve jQuery Şablonları gibi birkaç deniyorum. FireFox'ta Tamam çalışıyor gibi görünse de, HTML tabloları oluşturma söz konusu olduğunda hepsi IE7'de parçalanıyor gibi görünüyor.

Ayrıca MicrosoftAjaxTemplates.js'ye de baktım ( http://www.codeplex.com/aspnet/Release/ProjectReleases.aspx?ReleaseId=16766 adresinden ), ancak aynı sorunu olduğu ortaya çıktı.

Kullanılacak diğer şablon motorlar hakkında tavsiyeleriniz var mı?


1
Bu soruyu iki kez güncellemek istedim :)
Mark Schultheiss

1
Ben çok güzel (ama beta öncesi) JSViews ve JSRender kontrol ediyorum, potansiyel bir resmi JQuery / UI templating motoru gibi görünüyor (en azından bu yol haritası ne diyor)
Eran Medan

1
JsRender'ın herkese açık bir beta adayı var: borismoore.com/2012/03/…
John Papa

Şimdi DoT şablonlarını, iyi performansı ve bıyık gösterimi kullanıyorum
Eran Medan

Yanıtlar:


109

Rick Strahl adlı kullanıcının jQuery ile İstemci Templating adlı yazısına göz atın . JTemplates'i araştırıyor, ancak daha sonra John Resig'in mikro- geçici çözümü için daha iyi bir durum ortaya koyuyor , hatta biraz geliştiriyor. İyi karşılaştırmalar, çok sayıda örnek.



@ Thr4wn, repro kaynağı önemli ölçüde bağlantılı makalelerde tartışılan kütüphanedir. Her ikisi de Resig tarafından, tabii ki.
Frank Schwieterman

@Frank "repro kaynağı önemli ölçüde daha sonra bağlantılı makalelerde tartışılan kütüphane" Um ha? Ne dedin? Bununla ne demek istediğinden emin değilim.
Mark Schultheiss

2
@ Mark: "önemli ölçüde farklı" demekti.
Domenic

Bununla oluşturulmuş karmaşık formlara dair bir örnek görmedim. Herkes formunda bir nesnenin dizi bağlı yeni bir öğeyi barındırmak için bir satır, bir bütün şablonun bir kısmı, yani ne eklemek için ne keşfetti? Şablon, dizilerin eleman indekslerinin şablonlanmasını içerir ve POST işlemi için uygun şekilde serileştirilebilir. Ama her şeyi düşünürken sorun yaşıyorum. Amaç InfoPath benzeri bir işlevselliktir. (Mevcut çeşitli infopath özelliklerinin ve infopath alternatiflerinin farkındayım.)
Jason Kleban

47

Bu konuda biraz araştırma yaptım ve jquery-tmpl kullanacağım . Neden?

  1. John Resig tarafından yazılmıştır.
  2. Temel jQuery ekibi tarafından "resmi" bir eklenti olarak korunacaktır. EDIT: jQuery ekibi bu eklentiyi kullanımdan kaldırmıştır.
  3. Sadelik ve işlevsellik arasında mükemmel bir denge kurar.
  4. Çok temiz ve iyi düşünülmüş bir sözdizimi vardır.
  5. Varsayılan olarak HTML kodlar.
  6. Oldukça genişletilebilir.

Daha fazla bilgi için: http://forum.jquery.com/topic/templating-syntax


+1. Ama Rick Strahl'ları kullandım. Bcoz küçük bir tane ve amacım iyi hizmet ediyor.
IsmailS

Sadece bunun resmi eklenti olduğu açıklandı
serg

20
Ne yazık ki, amortismana tabi tutuldu . Forker var mı?
OnesimusUnbound

3
Senaryo 2012'de şimdi değişti mi, yani, resig'in orijinal senaryosunun üstünde geliştirilen kütüphaneleri kullanarak şablonlamaya daha iyi çözümler var mı?
Rajat Gupta

4
@OnesimusUnbound JS Render tarafından süper tohumlandı. github.com/BorisMoore/jsrender
Blowsie


17

jQuery Nano :

Şablon Motoru

Temel Kullanım

Aşağıdaki JSON yanıtınız olduğunu varsayarsak:

data = {
  user: {
    login: "tomek",
    first_name: "Thomas",
    last_name: "Mazur",
    account: {
      status: "active",
      expires_at: "2009-12-31"
    }
  }
}

yapabilirsin:

nano("<p>Hello {user.first_name} {user.last_name}! Your account is <strong>{user.account.status}</strong></p>", data)

ve hazır dize alırsınız:

<p>Hello Thomas Mazur! Your account is <strong>active</strong></p>

Test sayfası ...


Bu kontrol yapılarını yapmaz (ifs ve döngüler)
mahemoff

13

jQuery-tmpl, jQuery 1.5'ten başlayarak jQuery çekirdeğinde olacaktır:

http://blog.jquery.com/2010/10/04/new-official-jquery-plugins-provide-templating-data-linking-and-globalization/

Resmi belgeler burada:

http://api.jquery.com/category/plugins/templates/


EDIT: jQuery 1.5 dışında bırakıldı ve şimdi jQuery UI ekibi tarafından koordine edilecektir, çünkü yaklaşan jQuery UI Grid'in bağımlılığı olacaktır.

http://blog.jquery.it/2011/04/16/official-plugins-a-change-in-the-roadmap/


11

Sorununuzu nasıl ele aldığından emin değilsiniz, ancak PURE şablon motoru da var.


kısıtlamalarının yanı sıra, PURE'in kullanımı çok kolaydır
Jader Dias

@Jader, en çok hangi sınırlamalar acı verici?
Mic

@Mic PURE tasarımla sınırlıdır. Sunucu tarafı şablon motorlarında geçerli HTML'ye bağlı kalmanız gerekmez, ancak PURE HTML tabanlıdır. Ama başka bir JavaScript şablonu motoru sunucu tarafı olanlar kadar güçlü olmasına izin verecek tuhaflıklar olduğunu düşünüyorum.
Jader Dias

@Jader, yalnızca HTML için uygun. Ama tuhaflıklar ve başka bir motorla ne demek istediğini anlamadım.
Mic

@Mic PURE, bazı özelliklerin eklenebilmesi için sıfırdan yeniden yazılmalıdır. Geçersiz HTML şablonlarına izin vermek için script, özelliğinden typefarklı etiketler kullanmalısınız text/javascript. Bu, geçersiz HTML'ye izin veren bir "tuhaflık" tır.
Jader Dias

7

Bu, "en iyi" yi nasıl tanımladığınıza bağlıdır, lütfen konuyla ilgili yazımı buraya bakın

Eğer için bakacak olursak en hızlı , burada güzel kriter , bu gibi görünüyor DoT kazanç ve yapraklar herkes arkasında

En resmi JQuery eklentisini arıyorsanız , işte bulduğum şey

Bölüm I: JQuery Şablonları

Beta, geçici olarak resmi JQuery şablon eklentisi bu http://api.jquery.com/category/plugins/templates/

Ama görünüşe göre, çok uzun zaman önce Beta'da tutmaya karar verildi ...

Not: jQuery ekibi bu eklentiyi beta sürümünü geçmemeye karar verdi. Artık aktif olarak geliştirilmemekte veya sürdürülmemektedir. Dokümanlar, uygun bir yedek şablon eklentisi hazır olana kadar (referans olarak) burada kalır.

Bölüm II: Bir sonraki adım

Yeni yol haritası eklentileri yeni bir dizi için nişan gibi görünüyor, JSRender (DOM bağımsız ve hatta JQuery şablon render motoru) ve JSViews bağlayıcı ve gözlemci / gözlemlenebilir desen uygulaması bazı güzel veri var

İşte konuyla ilgili blog yazısı

http://www.borismoore.com/2011/10/jquery-templates-and-jsviews-roadmap.html

Ve işte en son kaynak

Diğer kaynaklar

Hala beta sürümünde ve yalnızca bir yol haritası öğesinde bile olmadığını, ancak şablonlar ve UI bağlama için resmi bir JQuery / JQueryUI uzantısı olmak için iyi bir aday gibi göründüğünü unutmayın


4

Sadece aptal olmak ^ ^

// LighTest TPL
$.tpl = function(tpl, val) {
    for (var p in val)
        tpl = tpl.replace(new RegExp('({'+p+'})', 'g'), val[p] || '');
    return tpl;
};
// Routine...
var dataObj = [{id:1, title:'toto'}, {id:2, title:'tutu'}],
    tplHtml = '<div>N°{id} - {title}</div>',
    newHtml    = '';
$.each(dataObj, function(i, val) {
     newHtml += $.tpl(tplHtml, val);
});
var $newHtml = $(newHtml).appendTo('body');

http://jsfiddle.net/molokoloco/w8xSx/ ;)


3

Bu jsquery'ye özgü değildir, ancak google tarafından açık kaynak olarak yayınlanan JS tabanlı bir şablonlama kütüphanesi:

http://code.google.com/p/google-jstemplate/

Bu, DOM öğelerinin şablon olarak kullanılmasına izin verir ve yeniden girilir (bir şablon oluşturmanın çıktısı hala farklı bir veri modeliyle yeniden oluşturulabilen bir şablondur).


2

Diğerleri jquery-tmpl'yi işaret etti ve ben bu cevabı iptal ettim. Ancak github çatallarına bir göz attığınızdan emin olun.

Orada önemli düzeltmeler ve ilginç özellikler de var. http://github.com/jquery/jquery-tmpl/network


1
Düzeltmeler için özel bir çatal var mı?
Kevin Hakanson

TBH, biraz dağınık ... Değişiklikleri hızlı bir şekilde inceledikten ve appendto'nun bir şirket olduğunu göz önünde bulundurarak github.com/appendto/jquery-tmpl için gittim. YMMV
Yann

jquery-tmpl resmi 1.4.3 dağıtımında katlanmıştır.
Yann


1

.NET Framework 2.0 / 3.5'te çalışıyorsanız, http://JsonFx.net tarafından uygulanan JBST'ye bakmanız gerekir . Bilinen JSP / ASP sözdizimine sahip olan ancak çalışma zamanında ayrıştırılması gerekmeyen kompakt önbellek kullanabilen şablonlar için derleme sırasında önceden derlenmiş bir istemci tarafı şablonlama çözümüne sahiptir. Şablonların saf JavaScript'e derlendiği için jQuery ve diğer JavaScript kitaplıklarıyla iyi çalışır.



1

Çok hafif işler için jquery-tmpl yeterlidir, ancak bazı durumlarda verilerin nasıl biçimlendirileceğini bilmesi gerekir (kötü şey!).

Daha tam özellikli bir templating eklentisi arıyorsanız Orange-J'yi öneririm . Freemarker'den ilham aldı. Aksi takdirde, nesneler ve diziler üzerinde döngüler, şablonlar içindeki şablonlar da dahil olmak üzere satır içi javascript'i destekler ve çıktı için mükemmel biçimlendirme seçeneklerine (maxlen, wordboundary, htmlentities, vb.) Sahiptir.

Oh, ve kolay sözdizimi.


0

Şablonlarınızı nasıl tasarlamak istediğinizi biraz düşünmek isteyebilirsiniz.

Listelenen şablon çözümlerinin birçoğuyla (jQote, jquery-tmpl, jTemplates) bir sorun, HTML'nize HTML olmayan bir araç eklemenizi gerektirir; bu, HTML araçlarında çalışmak veya HTML tasarımcıları ile geliştirme sürecinde bir acı olabilir . Şahsen bu yaklaşımın hissini sevmiyorum, ancak artıları ve eksileri var.

Normal HTML kullanan ancak öğe nitelikleri, CSS sınıfları veya harici eşlemelerle veri bağlarını belirtmenize izin veren başka bir şablon yaklaşımı sınıfı vardır.

Nakavt bu yaklaşımın iyi bir örneğidir, ancak bunu kendim kullanmadım, bu yüzden başkalarının beğenip beğenmediğine karar vermek için oylara bırakıyorum. En azından onunla daha fazla oynayacak zamanım olana kadar.

Başka bir cevap olarak listelenen PURE bu yaklaşımın başka bir örneğidir.

Referans için chain.js'ye de bakabilirsiniz , ancak orijinal sürümünden bu yana çok güncellenmiş görünmüyor. Daha fazla bilgi için bkz. Http://javascriptly.com/2008/08/a-better-javascript-template-engine/ .



0

Şu anda çoklu HTML şablonlama çerçevesi kullanıyorum. Bu çerçeve, tempolu verilerin DOM'nize aktarılmasını çok daha kolay hale getirir. Ayrıca büyük MVC modelleme.

http://www.enfusion-framework.org/ (örneklere bakın!)


-1

Beebole tarafından PURE'in yeniden yazılması da var - jquery pure html şablonları - https://github.com/mpapis/jquery-pure-templates

Çoğunlukla jquery seçicileri kullanarak çok daha fazla otomatik işleme izin vermelidir, daha önemli olan şey HTML'ye süslü şeyler koymak gerektirmez.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.