2016-04-30 15 views
0

タイトルに記載されているように、データがHTMLテンプレート内で参照されるときは未定義です。アンダースコアテンプレートに渡されたデータは定義されていません

JS:

var data = []; 

    for (var i = 0; i < rows.length; i++) { 
     data.push(rows[i]); 
     if (i == rows.length - 1) { 
      fs.readFile('tree.html', 'utf8', function (err, html) { 
       console.log(data); 
       var template = _.template(html); 
       var result = template({ data: data }); 
       res.send(result); 
      }); 
     } 
    } 

HTML:

<html xmlns="http://www.w3.org/1999/xhtml"><head> 
<title></title> 
</head> 
<body> 
<% 
console.log(data); 
%> 
</body> 
</html> 
+0

あなたが 'にconsole.log(HTML)は'それをチェックするためには正常に動作したことがありますか? – iplus26

+0

@ iplus26うわー、両方のデータとhtmlはテンプレートコードの直前に正しい値を保持しています。 –

+0

なぜこの古代の文字列を持っていますか? 'xmlns =" http://www.w3.org/1999/xhtml "'?それは過去からの爆発です – vsync

答えて

1

私はアンダースコアに新しいんだけど、それは私のために正常に動作します。あなたが逃したものを確認してください。

ファイル構造:ターミナルで

--test.html 
--test.js 

test.htmlという

<html xmlns="http://www.w3.org/1999/xhtml"><head> 
<title></title> 
</head> 
<body> 
<% 
console.log(data, 'it works! '); 
%> 
</body> 
</html> 

test.js

var data = [], rows = [1,2,3,4]; 
var _ = require('underscore'), 
    fs = require('fs'); 

for (var i = 0; i < rows.length; i++) { 
    data.push(rows[i]); 
    if (i == rows.length - 1) { 
    fs.readFile('test.html', 'utf8', function(err, html) { 
     console.log(html); // correct html file content 
     var template = _.template(html); 
     var result = template({ 
     data: data // After console print the html file, 
        // it runs the script code in html file, 
        // which in my point of view, means `template` works. 
     }); 
     // res.send(result); 
    }); 
    } 
} 

実行node test.js、それが正常に動作します。

enter image description here

PS:私はconsole.log(result)を行なったし、正しい結果を得た:

<html xmlns="http://www.w3.org/1999/xhtml"><head> 
<title></title> 
</head> 
<body> 

</body> 
</html> 
関連する問題