2015-09-21 101 views
0

我有一個使用Express和Vash的Node.js應用程序。我有一個佈局,看起來像這樣: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();升時,我的觀點不會加載國家統計局。如果我註釋掉該行,視圖會按預期加載。我懷疑因爲這條線使用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 

有沒有一種方法,使內layout.vashMyClass訪問?如果是這樣,怎麼樣?

謝謝!

+0

我注意到的第一件事是它應該是'新MyClass的()LoadItems() ;',但你仍然錯過了一些東西。我不熟悉vash,但看起來你需要以某種方式包含'MyClass.js'。 – tcigrand

+0

@AnotherDev。我同意我需要包含'MyClass'。我不知道如何。它就像我不能在Vash中使用'require'一樣。這看起來很奇怪。我不需要'新',因爲這個功能是靜態可見的。 – user70192

+0

難過,你如何用es5做到這一點? – tcigrand

回答

0

一般來說,在express中(就像在大多數視圖引擎中一樣),當您調用渲染函數時,可以傳遞模型中需要的任何屬性。你可以通過任何你想要在你的模型對象,其中包括一個類(這到底是一個功能 - 因此反對):

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