2012-05-11 22 views
5

Düzenleme: Sadece açık olmak gerekirse, jQuery'nin awesomenessini sorgulamıyorum. Onu heryerde kullanırım. JQuery'nin işlevselliğinden yararlanan düzenli js nesneleri üzerinde Widget'ların kullanılmasının avantajlarını anlamıyorum.Düzenli JS nesnesi üzerinden jQuery Widget'in avantajları?

Son zamanlarda üzerinde çalıştığım bir uygulamada bazı jQuery Widget'ları kullanmak zorunda kaldım ve onları çok kasıtsız/çirkin olmak için buluyorum. Gerçekten herhangi bir değer eklemediğini öğrenecek pek çok kongre var gibi görünüyor ve sözdizimi intellisense ya da kolay bir refactoring uymuyor.

Beni yanlış anlama, jQuery'yi sürekli kullanıyorum ve onsuz hayattan nefret ediyorum, yalnızca widget sözleşmesindeki değeri göremiyorum. Eminim bu noktayı kaçırıyorum çünkü çok yaygınlar, lütfen beni bilgilendirin. Neden insanlar düzenli js nesneleri yerine jQuery widget'ları yaratıyor?

basitleştirilmiş Örnek:

Düzenli JavaScript Nesne:

//instantiate & render 
var foo = new MyDomain.MyObject('#mySpecialInput', options) 
foo.render(); 

//assign to property 
foo.value = 5; 
//call method 
foo.multiplyBy(2); 
//bind event 
foo.change(function(){ 
    alert('it changed'); 
} 

jQuery Widget:

//instantiate & render 
var $foo = $('#mySpecialInput'); 
$foo.myWidget(options); 

//assign to property 
$foo.myWidget('option', 'value', 5); 
//call method 
$foo.myWidget('multiplyBy', 2); 
//bind event 
$foo.bind('myWidgetChange', function(){ 
    alert('it changed'); 
} 
+7

bir nedeni olacaktır [jQuery şaşırtıcı ve birçok şey yapar:)] (http://img180.imageshack.us/img180/3305/addanumbertoanothernumb.png) Bu @naveen – naveen

+1

bakmaya başlıyor gerçek cevap gibi daha fazla :) –

+1

Ben jQuery UI Widget Factory kullanıyorum (her zaman yazdığınız eklentileri yazmak için). Onları her nesne için kullanmayı düşünmüyorum. Fabrika, kamu yöntemlerini oldukça kolay bir şekilde çağırmayı sağlar ('$ foo.data ('myWidget'). MultiplyBy (2);'). –

cevap

1

büyük şey jQuery widget'ları olacağını uygulamanıza yapısını getirmek yardımcı olmasıdır Onlar olmadan korumak çok zor. Tabii ki, onlar da zaman zaman çok yararlı olabilir .bind() gibi oldukça yararlı olaylar sağlarlar. Biraz Googling'den sonra, jQuery widget'lerinde this article'u buldum ve avantajları hakkında biraz daha fazla ayrıntıya giriyorum.

Şahsen, komut dosyalarımı (daha fazlasını) el ile yapılandırmayı tercih ediyorum, ancak bunu yapmak istemiyorsanız jQuery widget'ları yardımcı olabilir.

... Bu bir widget yapısı dışında elinizde çok sert etmektir kod organizasyonun seviyesi sağlamaktadır: jQuery widget'ları yapıyı eklemek nasıl detaylandırma


İlgili alıntı. Kodun olması zorunludur (“bunu yapın, sonra, başka bir şey, daha sonra tıklamasıyla bağlanın”) bildirimde bulunun (“bir expando olayı gibi davranın”). Bu, "expando thing" ifadesinin ne anlama geldiğini tanımlamak için 'u serbest bırakır, aksi halde uygulamanızın dış katmanını değiştirir veya . Artık çok fazla yüz satır yok $ (document) .ready() blokları.

+1

Bu, etrafta atıldığını gördüğüm argüman, ancak jQuery küçük aracı, normal javascript nesnesinden daha fazla yapı/bakım kolaylığı getiriyor? Bağladığınız makale, widget'lardan önce hepimizin global işlevler ve OO olmayan kodlar kullandığımızı varsayıyor gibi görünüyor. Yapı ihtiyacını anlıyorum, ama neden sıra dışı sözdizimi? Neden özellik adlarını ve yöntemleri dizeler olarak geçirmeliyiz? Neden mirasları yeniden mi icat ediyorsunuz? Neden sadece javascript sözleşmelerini kullanmıyoruz? –

+0

Uzun bir açıklama var, bu yüzden makaleyi okumanızı tavsiye ederim. Ortalama zamanda ilgili bir teklif bulabilir miyim göreceğim. –

+0

Bağlantınız olan makale, widget'lardan önce hepimizin global işlevler ve OO olmayan kodlar kullandığını varsayıyor gibi görünüyor. Yapı ihtiyacını anlıyorum, ama neden sıra dışı sözdizimi? Neden özellik adlarını ve yöntemleri dizeler olarak geçirmeliyiz? Neden mirasları yeniden mi icat ediyorsunuz? Neden sadece javascript sözleşmelerini kullanmıyoruz? –

0
  1. Kod organizasyonu ve
  2. Namespacing yapılandırılmasına
  3. Kalıtım
  4. Uygun kapsam ve ortak öğeler
  5. erişim için kapanışları
  6. Çapraz geliştirici okunabilirliği ve ortak mimari
  7. önceden tanımlanmış özelliklere
+0

Tüm bunların, düzenli JS nesnelerinden daha fazla jQuery widget'ları kullanılarak daha zor/kasıtsız olduğunu iddia ediyorum. Belki bana bir iki örnek verebilir misin? –

+0

Dürüst bir cevap almaktan ziyade cevabınızı doğrulamak için birini aradığınızı hissediyorum, ama ben kazıyorum.1 & 5) Evinizdeki jquery nesnesine sahipseniz, uygulamanıza özel bir yapıya sahip olursunuz, ancak diğerleri kolayca atlayamaz. 3) JS, kesinlikle OO olmayan bir betik dilidir. Aslında, gerçek bir miras yoktur. 4) Bir jquery dom nesnesi için iyi olduğunu düşünen bir işlev yazdığım örneklerim vardı, ama yanlış olanı hedefliyor. 6) Nesneyi özel bir veri paketinde saklayabilirsiniz, ancak varsayılan olarak widget'lar veri içerisine depolanır. –

+0

Oh, ve kodu çağırmak için iki farklı kural yerine jQuery'nin kurallarını bir widget ile tutmak daha kolaydır. Eğer gerçekten bu kadar rahatsız ederse, Dojo'ya bakmayı öneririm. (Sözünü ettiğim bir canavara rastladım). ( –

1
genişletilebilirlik
- - yeri miras -da

(düz js bunu desteklemek için gerekli altyapıyı inşa etmek için yatırım olmadan) özellikleri gibi diğer OO sunmaktadır jQuery Widget'ı kullanarak Sites noktayı Düşünme eklemek için kendisinden uzanan verir . Bu, kodun okunabilirliğini iyileştirmek için genel ve özel yöntemlerin kavramı olan modüler ve yüksek düzeyde sürdürülebilir kodlara izin verir - kodun okunabilirliğini geliştirmek için genel ve özel yöntemler kavramı ve en iyi bölüm, jQuery nesnesini döndürdüğü için zincirlemeyi sürdürmesidir
- Widget'ı yönetmek için önceden tanımlanmış birçok yöntem vardır yaşam döngüsü: oluşturma, başlatma ve imha

jQuery küçük aracı çerçevesi, OO benzeri işlevselliği taklit eden bir araç olarak ele alınabilir.

Bu, tutarlı bir API ile karmaşık, durumsal eklentileri oluşturmak için esnek bir temel sağlar. Yalnızca, jQuery UI'nin parçası olan eklentiler için değil, genel altyapısının ortaklaşa yeniden oluşturulmasına gerek kalmadan nesne yönelimli bileşenler oluşturmak isteyen geliştiriciler tarafından tasarlanmıştır. - http://wiki.jqueryui.com/w/page/12138135/Widget%20factory

+1

iyi düşünülmüş bir cevabı takdir ediyorum, ama bu soruyu sorduktan yaklaşık bir yıl sonra, daha önce yaptığımdan daha fazla widget sözdizimi hakkında daha da güçlü hissediyorum. Her yerde sihirli dizeleri kullanmak sadece çok kötü. şimdi orada, intel'e izin vermeyen garip bir sözdizimi kullanmak için bir sebep yok lisense. –

+1

Evet, sizin amacınıza göre, widget'lar basit bir şey için basit bir şey için garip bir sözdizimine sahiptir. Örneğindeki bir kamu yöntemini çağırmak gibi: '$ (# selector) .widgetName(). WidgetName (" publicMethodName ");' – airboss

İlgili konular