2015-09-21 3 views
0

У меня есть приложение Node.js, которое использует Express и Vash. У меня есть макет, который выглядит следующим образом:Node.js - Как включить файл в шаблон vash?

layout.vash

<!DOCTYPE html> 
<html> 
@{ 
    model.items = MyClass.LoadItems(); 
} 
    <head> 
    </head> 
    <body> 
    </body> 
</html> 

MyClass является класс ES6 определен так:

MyClass.js

'use strict'; 

class MyClass { 
    constructor() { 
    } 

    static LoadItems() { 
    var items = []; 
    // ... 
    return items; 
    } 
} 

Моя проблема заключается в том, что мой взгляд не будет загружаться, когда я включу model.items = MyClass.LoadItems(); l ине. Если я прокомментирую строку, представление загрузится, как ожидалось. Я подозреваю, что, поскольку линия использует ES6, есть проблема с компиляцией. Когда я включаю линию, я вижу следующее сообщение об ошибке в окне консоли:

ERROR: 
ReferenceError: Problem while rendering template at line 2, character 16. 
Original message: Problem while rendering template at line 2, character 16. 
Original message: MyClass is not defined. 
Context: 

    1 | <!DOCTYPE html> 
    > 2 | <html lang="en"> 
    3 | @{ 
    4 |  model.items = MyClass.LoadItems(); 
    5 |  var navItemsB = []; 

. 
Context: 

    1 | @html.extend('layout', function(model){ 
    > 2 |  @html.block('content', function(model){    
    3 |  <div> 
    4 |   <div 

Есть ли способ сделать MyClass доступные в пределах layout.vash? Если да, то как?

Спасибо!

+0

Первое, что я заметил, это должно быть 'новый MyClass() LoadItems() ; ', но вы все еще чего-то не замечаете. Я не знаком с vash, но похоже, что вам нужно как-то включить MyClass.js. – tcigrand

+0

@AnotherDev. Я согласен, что мне нужно включить MyClass. Хотя я не уверен. Как будто я не могу использовать 'require' в Vash. Что кажется странным. Мне не нужно «новое», хотя функция статически видима. – user70192

+0

Gotcha, как вы это делаете с es5? – tcigrand

ответ

0

Вообще говоря, в выражении (например, в большинстве движков просмотра) вы передаете любые свойства, которые вам нужны в модели, когда вы вызываете функцию рендеринга. Вы можете передать все, что вы хотите в вашей модели объекта, в том числе класс (который, в конце концов, является функцией - значит, объект):.

app.get('/', function (req, res) { 
    res.render('layout', { MyClass }); 
}); 
Смежные вопросы