Node.js - 如何在vash模板中包含文件?

时间:2015-09-21 18:52:27

标签: javascript node.js vash

我有一个使用Express和Vash的Node.js应用程序。我的布局看起来像这样:

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();行时,我的视图无法加载。如果我注释掉该行,则视图将按预期加载。我怀疑因为该行使用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?如果是这样,怎么样?

谢谢!

1 个答案:

答案 0 :(得分:0)

一般来说,在express中(与大多数视图引擎一样),在调用render函数时,可以传递模型中所需的任何属性。你可以在你的模型对象中传递你想要的任何东西,包括一个类(它最终是一个函数 - 因此对象):

app.get('/', function (req, res) {
  res.render('layout', { MyClass });
});