2012-03-27 25 views
16

require.js ve handlebars şablonlarını kullanarak bir backbone.js uygulaması ile uğraştım (AMD modüllerini handlebar'lara ekledim) ve sadece şablonların ön derlemesinin adil bir şekilde hızlandırabildiğini okudum .Preveiled Handlebars şablonlar Requirejs ile Backbone içinde?

Gereksinim duyulan şablonların requirejs ile birlikte nasıl ekleneceğini merak ediyordum. Ben derlemek için adil bir kaç şablonum var (15), bu yüzden hepsi aynı çıktı dosyasında olması gerektiğinde veya bir kez derlenmiş olsa emin değilim. Ayrıca, göründüğü gibi gelen, derlenmiş şablonlar Oluşturucu komut kullanan aynı Handlebars ad paylaşan, bu yüzden benim dosyalarında şablonları gerektiren zaman bu konuda gitmek nasıl emin değilim.

Herhangi bir tavsiye harika olurdu! https://github.com/SlexAxton/require-handlebars-plugin

cevap

14

Requirejs-Handlebarsjs eklentisi göz at! Eklenti. Bu, şablonu yükler ve derler. RequireJ'ler derlenmiş şablonu önbelleğe alır ve yeniden kullanır.

eklenti kodu: main.js içinde

// hbtemplate.js plugin for requirejs/text.js 
// it loads and compiles Handlebars templates 
define(['handlebars'], 
function (Handlebars) { 

    var loadResource = function (resourceName, parentRequire, callback, config) { 
     parentRequire([("text!" + resourceName)], 
      function (templateContent) { 
       var template = Handlebars.compile(templateContent); 
       callback(template); 
      } 
     ); 
    }; 

    return { 
     load: loadResource 
    }; 

}); 

yapılandırma: Bir backbone.marionette görünümünde

require.config({ 
    paths: { 
     handlebars: 'libs/handlebars/handlebars', 
     hb: 'libs/require/hbtemplate', 
    } 
}); 

kullanımı:

define(['backbone', 'marionette', 
     'hb!templates/bronnen/bronnen.filter.html', 
     'hb!templates/bronnen/bronnen.layout.html'], 
     function (Backbone, Marionette, FilterTemplate, LayoutTemplate) { 
     ... 

Eğer büyük bir Omurga kullanmak .Marionette framework , varsayılan oluşturucuyu geçersiz kılar, böylece baypas eder. o şablon yükleyicisini (yükleme/derleme/önbelleğe alma için) yerleşik:

Marionette.Renderer = { 
    render: function (template, data) { 
     return template(data); 
    } 
}; 
+0

Teşekkürler! Bu çok işe yaramaz görünüyor. R.js ile nasıl bütünleştiğini seviyorum –

17

Basit bir yaklaşım mevcut metne dayalı bir RequireJS eklentisi oluşturmaktır:

+0

Bu iyi bir şeydi, ama kısmi işlemleri yapmıyor, değil mi? ben iyi başarısı için bu tekniği kullanarak sona erdi ama performansı yardımcı bir büküm ekledi – Leonidas

+1

sürece bunları kayıt olarak göremiyorum. Mümkünse önceden derlenmiş şablonlar kullanmak istedik, böylece Grunt.js tüm şablonlarımızı JST [] adındaki bir ilişkisel dizi olarak derledik. Yukarıdaki kod için, JST'nin varlığını ve ardından bu dizinin içindeki belirli şablonu kontrol eden bir şey eklemek kolaydır. Varsa, önceden derlenmiş şablonu döndürün. Aksi halde, yükü gösterildiği gibi yapın ve derleyin. Ardından, istediğiniz zaman değiştirebileceğiniz ve çalışma zamanında önceden derlenmiş olan birçok şablon kullanarak geliştirebilirsiniz. –

+4

işe yaramaz neden –

İlgili konular