2009-01-08 6 views
7

Grails'deki JavaScript işlevlerini doğrudan GSP'deki bir öğede ve/web-app/js altındaki ayrı bir javascript kaynak dosyasında tanımlamak için 2 yer vardır (örneğin, uygulama Js). Application.js içinde yaygın olarak yeniden kullanılan bir javascript işlevi tanımladık, ancak aynı zamanda dinamik kod kullanarak dinamik olarak işlev parçaları oluşturabilmemiz gerekiyor. Maalesef, $ {some groovy code}, ayrı javascript kaynak dosyalarında işlenmemiş gibi görünmektedir.Grails'deki JavaScript kaynaklarında mükemmel ifadeler yürütme

Bunu, javascript işlevini bir GSP sayfasındaki komut dosyası etiketiyle tanımlayarak yapmanın tek yolu var mı, yoksa daha genel bir çözüm var mı? Açıkçası biz yeniden verecek bir şablon GSP dosyası içindeki bir komut dosyası etiketi javascript işlevi tanımlayın, ancak tek bir yerde bir araya tanımlanmış bizim javascript fonksiyonları tutmak için itme bir sürü (yani harici javascript kaynak dosyası) bulunmaktadır. Bu aynı zamanda (javascript kaynak dosyaları genellikle sadece yerine gittikleri her html sayfası kaynağı içinde aynı javascript fonksiyonları yeniden yükleme, her müşterinin tarayıcısı tarafından bir kez indirilen) performans faydaları vardır. Ben birbirine yapıştırılması, sonra statik ve dinamik parçalar halinde fonksiyonunu kesiliyor harici kaynaktan statik olanları koyarak ve şablon GSP dinamik olanları koyma fikri ile etrafında oynadı, ancak bu gereksiz bir kesmek gibi görünüyor.

Herhangi bir fikrin var mı?

(düzenleme: "dir. Bu olurdu dinamik sonra bir kez indirilen ve istemci tarafından tekrar tekrar kullanılan bir JavaScript işlevi, parçalarını üretme fikir gibi kötü bir fikir gelebilir Ancak, parça Dinamik "sadece belki de haftada bir veya ayda bir kez değişir ve sonra sadece çok hafif. Çoğunlukla biz sadece bu kez, sadece bir kez, kodlanmış olsa bile, veritabanından üretilen bu parçayı istiyorum.)

cevap

13

JavaScript'inizi tutmak için kolay bir çözüm mütevazi bir JavaScriptController oluşturmak ve eylemlerini harita etmektir "/ js/*" senin UrlMappings.groovy dosyasına bu ekleyerek:

"/js/$action"{ 
    controller = "javascript" 
} 

daha sonra, istediğiniz her bir dinamik JS dosyası için bir eylem oluşturun, düzeninizde <HEAD>'a ekleyin ve önceden, içine Parçacık snippet'leri ekleyebileceğiniz bir JS dosyanız var! :)

Not: düzgün içerik türlerine dosya uzantıları eşleşmiyor Grails bir hata halen var olduğunu tespit ettik, böylece görünüm dosyalarının üstünde <%@ page contentType="text/javascript; UTF-8" %> dahil etmek gerekir.

+0

Çok zeki, teşekkürler –

+0

Oldukça hoş geldiniz! Geçen hafta benzer bir soruna rastladım, CSS dosyaları ile uğraşmak dışında :) – gabriel

0

başka bir yolu yoktur - kapakları beklediği bir işlev üretilen kod geçmektedir. Bu kapanışlar elbette program tarafından oluşturulur. Oluşturulan kod elbette gsp sayfasında satır içi/script ile etiketlenmiş. Bu ya da kod doğasına bağlı olarak çalışmıyor olabilir

üretilir. Ama çalışacağından şüpheleniyorum ve eğer yapmazsanız, javascript'in kodlama stiline küçük bir şekilde ince ayar yapmak kesinlikle işe yarayacaktır. Yine de, eğer bu 'oluşturulan' kod çok değişmezse, bu oldukça fazla imo.

7

Bu büyük bir çözümdür. Ben bu artık/js/sen/web app size javascript dosyalara erişmek için izin gidiyor çünkü o

"/js/$action"
bir eşleştirmesini somthing diğer kullanmak için bir öneri sunmak istiyorum.Tüm javascript dosyalarınızın denetleyicinizin göstereceği bir dizine taşınması gerekirdi.

Hala dışarı çatışma ile/web-app/js/dosyalarında dosyalara işaret edebilir

"/dynjs/$action"

Bu şekilde gibi bir şey kullanmak ve javascript dosyaları gsp etiketleri Faydaları dalabilir

Lütfen yanılıyorsam beni düzeltin.

+0

Bunu bir yorum olarak ekledim ama benim itibarım şu anda 50'nin altında, bu yüzden diğer insanların cevabını yorumlayamıyorum –

+0

İyi nokta. Bununla birlikte, "/ js/$ action" için tam bir URL eşlemesi oluşturmanız gerekmediğini ve doğrudan/tek bir eylem belirtebileceğinizi unutmayın, örneğin "/js/dyn.js". –

1

Eğer denetleyici JavaScript kodu (eğer harika kodunu kullanmak niyetinde olduğu Javascript başvuru olduğunu Teslim edilen HTML sayfası) tarafından oluşturulan modelleri kullanmak istiyorsanız, o zaman bu tekniği kullanabilirsiniz:

Bu teknik URL eşleştirmelerini değiştirmenize gerek yoktur ve ekstra denetleyici oluşturmanızı gerektirmez. aşağıdaki gibi görünüm GSP olarak

javascript ekleyin: görünümlerinde

<script type="text/javascript"> 
     <g:render template="/javascript/yourJavascriptFile"/> 
    </script> 

bir "javascript" klasör oluşturmak klasörü. (Bu görüşü render edilir) _yourJavascriptFile.gsp

Yalnızca _yourJavascriptFile.gsp dosyasındaki tüm GSP kodunu kullanamazsınız, ancak aynı zamanda denetleyici oluşturulan tüm modellerini kullanabilirsiniz: Ve adında bir dosya oluşturun.

Not: Javascript klasörü hakkında özel bir şey yok. İstediğiniz herhangi bir şeyi adlandırabilir VEYA varolan bir görünüm klasörünü kullanabilirsin. Bu sadece, HTML tükürme GSP'nizi Javascript tükürme GSP'lerinden düzenlemek ve tanımlamaktır. içeride gsp kod grails tarafından doğru işlenecek bu

/wherever/the/js/files/are/thescript.js.gsp 

gibi _something.js.gsp vb

1

Adı senaryolarınızı: Alternatif olarak, gibi bazı adlandırma kurallarını kullanabilirsiniz. Bu işe yarıyor ama iyi bir fikir olarak kabul edilip edilmediğine dair hiçbir fikrim yok.