Soru Nodejs EJS yardımcı işlevleri?


EJS şablonlarına yardımcı fonksiyonları kaydetmenin bir yolu var mı? Böylece herhangi bir EJS şablonundan çağrılabilirler mi? Yani, böyle bir şey çalışması gerekir.

app.js

ejs.helpers.sayHi = function(name) {
    return 'Hello ' + name;
});

index.ejs

<%= sayHi('Bob') %>

18
2017-11-04 18:58


Menşei


bu <% = ile çalıştı mı? - chovy
uydurdum ejs.helpers aradığım şeyin bir örneği olarak, mevcut değil. Yani her iki şekilde de önemli değil, ama haklısın, muhtemelen <%= - Stephen Bugs Kamenar
Filtreler soru dışında mı? Onlar, EJS github'unda yardımcı olan ve belgelenmiş birer belge. Yardımcınız böyle bir şeye benzeyecek <%= 'Bob' | sayHi %> şablonda. Fonksiyon aynı şekilde yazılır. - numbers1311407
Visionmedia'nın ejileri hakkında konuşmuyorsanız özür dilerim. Burada sonuçlara varmak. - numbers1311407
Filtreleri kullanmanın gerçekten işe yarayacağını test etmeye çalışıyordum ve birden fazla argümanı geçmeme izin verdim. Bir nesneyi argüman olarak geçersem, bu işe yarayacak. Yine de bir çözüm gibi geliyor. - Stephen Bugs Kamenar


Cevaplar:


Evet, Express 3'te yardımcıları ekleyebilirsiniz app.locals. Ör:

app.locals.somevar = "hello world";

app.locals.someHelper = function(name) {
  return ("hello " + name);
}

Bunlar, şu şekilde göründüğünüzde erişilebilir olacaktı:

<% somevar %>

<% someHelper('world') %>

Not: Express 2.5, yardımcıları farklı şekilde yaptı.


27
2018-04-19 06:08



Ve bu kodu nereden yazıyorsun? Bir bağlantı yararlı olurdu. - Vadorequest
Bu kodu, var app = express () yaptıktan sonra ana uygulama gövdesine yazabilirsiniz. - dylanized
Hum. Uygulamam yok, çünkü bu, sails.js tarafından aşırı yüklenmiş ve muhtemelen uygulama.js'sine yazılması kötü bir fikirdir. Bunu, uygulama.js tarafından adlandırılan başka bir dosyaya yazmayı tercih ederim. - Vadorequest
config klasöründeki middleware.js, nasıl yapılacağına dair bir gösterge verir. github.com/stefanbuck/sails-social-auth-example. Orada tanımlayabilirsin - ajeeshpu
.Ejs belge çalışmasında çağrı yapmak için bir eşitliğin gerekli olduğunu buldum: <% = someHelper ('world')%>. - Harvey


Bunun için başka bir çözüm var ve bence bazı avantajları var:

  • Kod dışa aktarma filtrelerinize izin vermeyin.
  • Hepsini dışa aktarmaya gerek kalmadan herhangi bir yönteme erişin.
  • Daha iyi ejs kullanımı (hayır | borular).

Kontrolörünüzde:

exports.index = function(req, res) {
// send your function to ejs
    res.render('index', { sayHi: sayHi });
}

function sayHi(name) {
    return 'Hello ' + name;
};

Artık eJ'inizde sayHi işlevini kullanabilirsiniz:

<html>
    <h1><%= sayHi('Nice Monkey!') %></h1>
</html>

Modülleri ejs'ye göndermek için bu yöntemi kullanabilirsiniz, örneğin, tarihleri ​​biçimlendirmek veya ayrıştırmak için 'moment' modülü gönderebilirsiniz.


17
2017-08-29 01:42



+1 Bu sayfada sorunumun çözülmesine yardımcı olan tek şey, = işlevden önce <%= sayHi() %> aksi halde yazdırmaz - iConnor


İşte bir örnek filtredir ... Yardımcılara aşina değilim.

var ejs = require('ejs');

ejs.filters.pluralize = function(num, str){
    return num == 1 ? str : str+'s';
};


 <%=: items.length | pluralize:'Item' %>

1 ise "Öğe" üretecek veya 0 veya> 1 ise "Öğeler" üretecek

app.js

ejs.filters.sayHi = function(name) {
    return 'Hello ' + name;
});

index.ejs

<%=: 'Bob' |  sayHi %>

3
2017-11-04 23:49



FYI, bu artık EJS V2 ile çalışmıyor. Dilanized ve Robertomarin her iki versiyonda da çalışır. - jmcollin92


Ben kullanıyorum:

Yardımcılar / helper.js

var func = {
    sayhi: function(name) {
        return "Hello " + name;
    }, 
    foo: function(date) {
        //do somethings
    }    
};
module.exports = func;

Yönlendiricide

router.get('/', function(req, res, next) {
    res.render('home/index', {
        helper: require('../helpers/helper'),
        title: 'Express'
    });
});

Şablonda:

<%= helper.sayhi("Dung Vu") %>

iyi şanslar


0
2017-11-16 05:45