Articles of handlebars.js

为什么Handlebars.template(templateSpec)不能像(I)那样工作?

我试图预编译一个节点的应用程序中的句柄模板。 后来,我想存储/检索预编译模板到/从数据库并使用它。 var handlebars = require('handlebars'); var templateSpec = handlebars.precompile('{{foo}}'); var template = handlebars.template(templateSpec); 我将此代码基于Handlebars参考 。 上面的代码会引发错误: /home/ubuntu/workspace/handlebars/node_modules/handlebars/dist/cjs/handlebars/runtime.js:50 throw new _exception2['default']('Unknown template object: ' + typeof templateSpec); ^ Error: Unknown template object: string at Object.template (/home/ubuntu/workspace/handlebars/node_modules/handlebars/dist/cjs/handlebars/runtime.js:50:11) at HandlebarsEnvironment.hb.template (/home/ubuntu/workspace/handlebars/node_modules/handlebars/dist/cjs/handlebars.runtime.js:51:20) at Object.<anonymous> (/home/ubuntu/workspace/handlebars/test.js:5:27) at Module._compile (module.js:409:26) at Object.Module._extensions..js (module.js:416:10) at Module.load (module.js:343:32) at Function.Module._load (module.js:300:12) at […]

是否有可能使用res.render多次渲染局部variables

我有一个关于res.render的问题。 我正在尝试为我的网站构build一个非常简单的消息传递function,而不是像个人消息,Dms等那样进行实时聊天。我正在使用handlebars来呈现html和node.js。 app.get('/dashboard/messages/',ensureAuthenticated,function(req,res) { res.render('messages'); Msg.find({ username: req.user.username }, 'username message sender', function (err, msg) { if (err) { console.log('notfound') return handleError(err); } else{ var msgSender = [] msg.forEach(function(msg){ var Obj = { 'sender': msg.sender, 'message':msg.message } msgSender.push(Obj) }) console.log(msgSender.sender) res.render('messages',{'sender': msgSender.sender, 'message': msgSender.message}) 主要的问题是,如果我把一个for循环渲染只加载最后发送给用户的消息。 而且你也不能设置标题。 我正在考虑做一个res.send{'sender': msgSender.sender, 'message': msgSender.message}) 。 这里是handblebar代码: <div class="panel panel-default"> […]

在手柄栏中的样式

我是新来的烬,可以使用一些帮助,试图风格我创build的进度栏。 这就是创build进度条的过程: {{ember-progress-bar style=myStyle shape="Circle" useDefaultStep=false progress=model.points options=(hash strokeWidth=5 duration=600)}} 我想在控制器中使用这个代码来devise它的样式: export default Ember.Controller.extend({ myStyle: "color: #3a3a3a" }); 但是这不起作用。 任何build议,我需要做什么不同?

会话值无法加载的请求,但加载下一个请求

作为一个节点的新手,我现在越来越困惑了好几天了,我想我再也忍受不住压力了。 所以我觉得我唯一的出路就是在睁开眼睛的时候在这里张贴我的挑战,试图以任何方式,我可以没有任何积极的结果。 我正在使用快递节点,以及express-session和redis来构build我的应用程序。 同时,我正在使用Mysql数据库来存储我的数据,并使用redis来存储会话。 一切似乎正常工作,但问题已经与我的会话variables。 当我在会话中存储一个值,并试图检索它,它不会加载,同时,在控制台中输出的值是完美的。 但是,当我尝试请求其他内容时,则显示以前的会话值。 所以就像之前的会话被加载在当前的请求。 我正在使用把手作为我的模板。 我只是不知道我在做什么错,但都是一样的,这很奇怪。 正如我所指出的,先前的会话值在下一次请求时加载,或者说当前的请求加载先前的会话值。 有什么build议吗?

在快递应用程序中存储自定义Handlebars助手的位置?

作为我学习Node.js的一部分,我正在使用Express + Handlebars做一个应用程序。 我来到了需要为Handelbars视图引擎注册自己的帮手的地步。 我用registerHelper()方法定义了自己的帮助器,但是我不知道应该在我的项目结构中放置这个定义,以使我的视图(最好是全局的)可以访问帮助器。 你如何去做呢? 我的项目结构非常基本,我认为: –bin –middleware –models –node_modules –public –views –routes app.js 在app.js中,我需要handlebars模块,并使用它设置布局引擎。

如何使用一个局部variables的值代替HandleBarjs中的其他variables

我正在面对和处理酒吧问题。 我已经创build了两个局部variables与语言的名称,并对应的两个Json文件的path。 app.locals.en=require('../locales/en.json'); app.locals.de=require('../locales/de.json'); 我正在检测URL中的de或en并存储到另一个局部variables调用“Lang” app.locals.lang = "Some code that detects DE or EN from URL and Stores into lang" 现在在Handlebrsjs我正在使用类似的东西 <h1>{{lang.Home.TITLE}}</h1> 上面的Lang应该给De或者它给的EN,但是它不会去Json文件,但是如果我们简单地使用 <h1>{{en.Home.TITLE}}</h1> 它工作正常。 我想用lang.home.title代替en.home.title,因为lang也有相同的值。 但它不适用于lang.home.title 必须有一些办法来解决这个问题。 请告诉我。 谢谢。

node.js – 如何caching使用服务工作者的handlebars.js

我想问一下服务人员。 我做了一个Web应用程序,并试图实现服务人员。 我为我的视图布局使用.hbs,当我caching静态文件时,我无法caching.hbs,.css和.js文件。 这是我如何保存我的文件: public/ css/ style.css js/ app.js manifest.json service-worker.js views/ home.hbs partial/ header.hbs 当我部署我的应用程序时,它无法cachinghome.hbs,style.css和我的app.js文件; 我无法离线访问我的网页。 我该怎么办才能解决这个问题? 这是我的app.js: if ('serviceWorker' in navigator) { navigator.serviceWorker .register('./service-worker.js', { scope: './service-worker.js' }) .then(function(registration) { console.log("Service Worker Registered"); }) .catch(function(err) { console.log("Service Worker Failed to Register", err); }) } var get = function(url) { return new Promise(function(resolve, reject) […]

使用Handlebars.js显示一个JSON数组

尝试使用handlebars.js模板系统从JSON数组中显示雇员数组的全部内容。 数组中的数据没有被显示,我不知道为什么。 如果答案是显而易见的,我是新来的车把手,所以很抱歉。 数据服务是从JSON数组填充员工数组的函数,SERVER.JS是这些函数被调用的地方 //SERVER.JS var HTTP_PORT = process.env.PORT || 8080; var express = require('express'); var data = require('./data-service'); var fs = require('fs'); var app = express(); var path = require('path') var object = require('./data-service'); var bodyParser = require('body-parser') var exphbs = require('express-handlebars'); app.use(express.static(__dirname + '/public')); app.use(bodyParser.urlencoded({extended:true})) console.log("Express http server listening on 8080"); app.get('/ employees',function(req,res){ […]

shopping-cart.hbs页面没有被渲染

这是我的路由文件,我想呈现shopping.hbs文件。 我得到正确的输出在console.log.Shopping-cart.hbs文件是在我的商店文件夹里面的意见。 router.get('/shopping-cart',function(req,res,next){ if(!req.session.cart) { return res.render('shop/shopping-cart',{products:null}); } var cart=new Cart(req.session.cart); console.log(cart.totalPrice); console.log(cart.generateArray()); res.render('shop/shopping-cart',{products:cart.generateArray(),totalPrice: cart.totalPrice}); }); module.exports = router; 这是generateArray的代码。 如果我将数组传递给页面,则页面呈现成功。 module.exports=function Cart(oldCart) { this.items=oldCart.items || {}; this.totalQty=oldCart.totalQty || 0; this.totalPrice=oldCart.totalPrice || 0; this.add=function(item,id) { var storedItem=this.items[id]; if(!storedItem) { storedItem=this.items[id]={item:item,qty:0,price:0}; } storedItem.qty++; storedItem.price=storedItem.qty*storedItem.item.price; this.totalQty++; this.totalPrice+=storedItem.item.price; }; this.generateArray=function(){ var arr=[]; for(var id in this.items){ arr.push(this.items[id]); } […]

节点js,Express和句柄渲染fullcalendar插件无法正常工作

我一直无法实现fullcalendar到我的应用程序,并找不到任何信息详细说明如何实现它使用节点,快递和句柄。 我已经尝试了多种方式来添加fullcalendar没有任何运气。 在我的应用程序的其他网页正在工作,并提供他们的信息,所以我不知道为什么fullcalendar后按照网站上的说明不起作用。 <!– main.handlebars –> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous"> <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous"> <!– Page level plugin CSS–> <link href="vendor/datatables/dataTables.bootstrap4.css" rel="stylesheet"> <!– Custom styles for this template–> <link href="css/sb-admin.css" rel="stylesheet"> <link href="css/style.css" rel="stylesheet"> <!– Link and script for […]