Express-hbs:带有选项/属性的异步Helper
Express-hbs: Asynchronous Helper with options/attrs
我正在使用express-hbs和Async helper,但我需要将选项发送到helper,但Async helper不支持此功能(或者我不知道如何)。正如你所看到的(下面的代码),我试图加载一个ADS助手/组件,但我需要发送额外的信息/属性来渲染基于方向和尺寸。
JavaScripthbs.registerAsyncHelper( 'ads', function(filename, cb, options) {
// options: is undefined
// LOAD ADS FROM REMOVE SERVER.
cb( new hbs.SafeString( ' == ADS == ' ) );
});
HTML
{{{ads'page-x', 'vertical', '256x56' }}
有人能帮我解决这个问题吗?谢谢你! 简短的回答是,您目前(v0.7.10)只能在express-hbs中提供一个参数。
我能想到的唯一解决方法是使用JSON字符串作为参数,然后使用JSON.parse()在您的辅助函数中再次获得它们。
例如:
hbs.registerAsyncHelper( 'ads', function(arg, cb) {
var options = JSON.parse(arg);
console.log(options);
// LOAD ADS FROM REMOVE SERVER.
cb( new hbs.SafeString( ' == ADS == ' ) );
});
{{{ads "['"page-x'",'"vertical'",'"256x56'"]" }}}
express-hbs中出现多个参数问题的原因:
tl,博士
express-hbs registerAsyncHelper代码:
ExpressHbs.prototype.registerAsyncHelper = function(name, fn) {
this.handlebars.registerHelper(name, function(context) {
return async.resolve(fn.bind(this), context);
});
};
只向车把注册一个参数(context)。但是handlebars将使用每个提供的参数作为额外参数调用注册的helper。所以注册函数应该是这样的:
ExpressHbs.prototype.registerAsyncHelper = function(name, fn) {
this.handlebars.registerHelper(name, function(contextArgs) {
return async.resolve(fn.bind(this), Array.prototype.slice.call(contextArgs));
});
};
,但这也需要改变resolve函数。所以你必须等待修复或者自己修复,我猜。
正如你的问题下面的评论中提到的,在车把栏中多个参数的正确语法是不使用逗号。所以你的模板应该像这样(当handlebars-hbs是固定的):
{{{ads 'page-x' 'vertical' '256x56'}}}
相关文章:
- 在异步函数调用过程中,当对象的属性值发生变化时,JavaScript中的对象属性值会发生什么变化
- 异步编程-如何在对象数组中循环,并使用从api获取的数据更改每个对象的属性
- javascript<脚本异步属性>
- Javascript-在检查对象属性是否存在时避免异步竞争条件
- 使用脚本异步属性的含义是什么
- 异步脚本属性与异步属性
- 具有异步设置属性的 JS 对象
- 如何在对象构造期间使用异步生成的值分配属性
- 加载类异步的单个属性
- 余烬在加载时观察到异步属于关系属性
- 流星模板异步呈现 - 无法读取 null 的属性“偏移宽度”
- Ember异步计算属性返回未定义的
- 异步关系上的Ember数据计算属性
- 动态异步加载CSS(通过在Javascript中设置“href”属性)
- 角度指令-异步属性插值
- 在角控制器中,如何在初始化另一个属性之前先初始化多个异步属性
- 在AngularJS中,如何为多个控制器的共享服务属性的异步模型更改更新绑定[.]
- 填充某些属性的Javascript异步调用
- 从回调(异步方法)内部访问对象文字属性
- 如何防止反广告拦截脚本改变'src'属性异步地调用iframe元素