2012-09-21 43 views
8

Dahili şablonlama sistemi ile knockout.js kullanıyorum. Öyle olarak şablonları tanımlayın:knockout.js çalışma zamanında yükleme şablonları

<script type="text/html" id="subjectItemView"> 
    <span class="name" data-bind="text: subjectName" /> 
</script> 

Sonra şablonun kimliği kullanmıyor bu yüzden senaryonun bir parçası olarak bu haiz bir zorunluluktur.

Tek sayfalık uygulamada bu şablonlardan adil bir kaç tane var ve son zamanlarda gereksinim duyulduklarında gerekli olan komut dosyalarını yüklemek için require.js'yi kullanmaya geçtiler. Ben şablonlar ile şablonlar bağımlılıkları olarak listeleyebilir, böylece tercihen require.js kullanarak, aynı şablonları yapmak istiyorum.

Bunu nasıl yaparım?

cevap

10

require.js metin eklentisini kullanıyorum: http://requirejs.org/docs/api.html#text. Şablon metnine sahip olduktan sonra, sayfayı yeni bir komut dosyası etiketine ekleyebilirsiniz (text/html veya javascript'ten başka bir türle).

Aslında, dizeleri doğrudan işleyen değiştirilmiş bir şablon motoru kullanıyorum, böylece sayfaya ekstra komut dosyası etiketleri eklemem gerekmiyor.

this.activate = function() { 
     //load view model from the server 
     if (!this.loaded) { 
      require(["modules/" + name, "text!../templates/" + self.template + ".html"], function(Module, template) { 
       ko.templates[self.template] = template; 
       self.data(typeof Module === "function" ? new Module() : Module); 
       self.loaded = true; 
      }); 
     } 
    }; 

ben gibi görünüyor kullanmak stringTemplateEngine: iyi çalışıyor https://github.com/rniemeyer/SamplePresentation/blob/master/js/stringTemplateEngine.js

+1

Teşekkür Ryan,

Kodum şöyle görünür. Bu stringTemplateEngine harika! İşlemi bir modülde tamamladım, böylece her yerde aynı boilerplate koduna sahip değilim. https://github.com/aranm/ko.loadTemplateUsingRequireText. –

+0

Bu yaklaşım koExternalTemplateEngine (https://github.com/ifandelse/Knockout.js-External-Template-Engine) ile birlikte kullanılabilir mi? Veya birden fazla özel şablon kaynağına sahip olmak mümkün değil mi? – daedalus28

+0

Son sonucun ne olmasını istediğinizi açıklayabilir misiniz? Dış şablon altyapısının şablonu almayı, ancak komut dosyası olarak eklememesini mi istiyorsunuz? –

İlgili konular