2017-10-21 259 views
0

我试着渲染EJS代码,我从home.js发送到home.ejs作为一个字符串,但它不起作用。我现在正在尝试,但似乎没有任何工作。我的代码是:EJS不在客户端渲染ejs代码

home.js

var templates = {}; 
templates.onScroll = fs.readFileSync('views/partials/onScrollAppendPost.ejs', 'utf-8'); 
res.render("users/home", {templates: templates});` 

home.ejs

var template = new EJS({text: <%- JSON.stringify(templates.onScroll) %>}).update('#mainContainer', {postArr: postArr}); 

编辑:

什么即时试图做的是我要检测当用户到达页面底部时。使用此代码:

$(window).scroll(function() { 
     if ($(window).scrollTop() == $(document).height() - $(window).height()) { 
//get post data and append post 
}}); 

当用户到达页面的底部时,我想将ejs代码添加到页面。基本上我想在ejs和js之间进行沟通。

+0

说实话,我从来没有见过这样的代码,但也许我只是无知。你是如何学习它的?你能提供一些使用类似代码的教程或例子吗? –

+0

这些模板需要在服务器本身上编译,浏览器无法编译ejs文件AFAIK。你需要使用模板引擎 –

+0

[检查此](https://coligo.io/templating-node-and-express-apps-with-ejs/) –

回答

0

根据在http://ejs.co的例子中,你首先需要包含EJS的浏览器建立在你的页面:

<script src="ejs.js"></script> 

然后你可以使用EJS客户端这样的:

var html = ejs.render('your template here', {postArr: postArr}); 

$('#mainContainer').html(html); 

这里我假设postArr设置得当,可能是AJAX请求的结果。

当你使用EJS生成EJS这一切得到了很多更加难以理解,但在你的home.ejs相关的代码将是这样的:

var html = ejs.render(<%- JSON.stringify(templates.onScroll) %>, {postArr: postArr}); 

$('#mainContainer').html(html); 

这假定onScroll模板没有按” t include任何其他模板。您尚未指定是否使用home.ejs生成HTML或JavaScript,因此尚不清楚其他转义考虑可能适用的其他因素,但这可能不会成为问题。

+0

很抱歉,现在正在处理考试。这是我在页面上看到的一部分,当我使用<% - JSON.stringify(templates.onScroll)%>'\ r \ n \ r \ n <%if(postArr [i] .bestAnswer!= null) {%> \ r \ n \ r \ n <% }else { %> \ r \ n \ r \ n <% } %> \ r \ n \ r \ n <%} else if(postArr [i] .rateStatus == false){%> \ r \ n \“data-status = \”downvoted \“\ r \ n style = \”display:flex; flex-direction:列;保证金:-160px 0 0 0;位置:绝对; \“\ r \ n \ r \ n <%= postArr [i]。rateCount%> '@skirtle – ihnamdar

+0

我刚刚意识到它在'<% - JSON.stringify(templates.onScroll)%>'后面实现了一切并将它输出到页面:/ – ihnamdar