将自定义车把助手导入到 assemble 的正确方法
Correct way to import custom handlebar helpers to assemble
有以下 assemble 文件,一切都按预期加载。如果我使用 handlebars-helpers,该文件会编译,但它缺少我需要的助手。所以我不得不使用自定义助手 file/module
var gulp = require('gulp');
var rename = require('gulp-rename');
var assemble = require('assemble');
//var helpers = require('handlebars-helpers');
var app = assemble();
var prettify = require('gulp-prettify');
var config = require('../config');
gulp.task('init', function(cb) {
app.helpers(config.paths.path_src + 'partials/_helpers/is-helper.js');
//app.helper('compare', helpers.comparison());
app.partials(config.paths.path_src + 'templates/includes/**/*.hbs');
app.layouts(config.paths.path_src + 'templates/layouts/**/*.hbs');
app.pages(config.paths.path_src + 'templates/content/**/*.hbs');
cb();
});
gulp.task('assemble', ['init'], function() {
return app.toStream('pages')
.pipe(app.renderFile())
.pipe(prettify({
indent_inner_html: false,
preserve_newlines: true,
end_with_newline: true,
extra_liners: ['head', 'body']
}))
.pipe(rename({
extname: '.html'
}))
.pipe(rename({dirname: ''}))
.pipe(app.dest('site'));
});
gulp.task('test', ['assemble']);
现在我已经尝试过 handlebars-helper 但它没有我想要的帮助文件所以我不得不使用下面的文件:
/*
Custom handlebars helpers which allows to make
{{#is a '===' b}}}
{{/is}}
*/
module.exports.register = function (handlebars) {
var isArray = function(value) {
return Object.prototype.toString.call(value) === '[object Array]';
}
var ExpressionRegistry = function() {
this.expressions = [];
};
ExpressionRegistry.prototype.add = function (operator, method) {
this.expressions[operator] = method;
};
ExpressionRegistry.prototype.call = function (operator, left, right) {
if ( ! this.expressions.hasOwnProperty(operator)) {
throw new Error('Unknown operator "'+operator+'"');
}
return this.expressions[operator](left, right);
};
var eR = new ExpressionRegistry;
eR.add('not', function(left, right) {
return left != right;
});
eR.add('>', function(left, right) {
return left > right;
});
eR.add('<', function(left, right) {
return left < right;
});
eR.add('>=', function(left, right) {
return left >= right;
});
eR.add('<=', function(left, right) {
return left <= right;
});
eR.add('==', function(left, right) {
return left == right;
});
eR.add('===', function(left, right) {
return left === right;
});
eR.add('!==', function(left, right) {
return left !== right;
});
eR.add('in', function(left, right) {
if ( ! isArray(right)) {
right = right.split(',');
}
return right.indexOf(left) !== -1;
});
var isHelper = function() {
var args = arguments
, left = args[0]
, operator = args[1]
, right = args[2]
, options = args[3]
;
// console.log(args);
if (args.length == 2) {
options = args[1];
if (left) return options.fn(this);
return options.inverse(this);
}
if (args.length == 3) {
right = args[1];
options = args[2];
if (left == right) return options.fn(this);
return options.inverse(this);
}
if (eR.call(operator, left, right)) {
return options.fn(this);
}
return options.inverse(this);
};
handlebars.registerHelper('is', isHelper);
return eR;
};
我不断收到以下错误,缺少助手 "is"。好像没有注册! 请帮忙!!!
is
帮助文档是 here。
Also is there a way to import custom helpers?
这是描述here。
您不使用路径,而是使用 require
:
// single helper (required module returns the helper function)
app.helper('is', require('./helpers/is'));
// multiple helpers (required module returns an object of helper functions... e.g. key/value pairs)
app.helpers(require('./helpers'));
上面的自定义助手代码使用 grunt-assemble
语法来注册助手。在这种情况下,我会将您的助手更改为如下所示:
/*
Custom handlebars helpers which allows to make
{{#is a '===' b}}}
{{/is}}
*/
module.exports = function () {
var isArray = function(value) {
return Object.prototype.toString.call(value) === '[object Array]';
}
var ExpressionRegistry = function() {
this.expressions = [];
};
ExpressionRegistry.prototype.add = function (operator, method) {
this.expressions[operator] = method;
};
ExpressionRegistry.prototype.call = function (operator, left, right) {
if ( ! this.expressions.hasOwnProperty(operator)) {
throw new Error('Unknown operator "'+operator+'"');
}
return this.expressions[operator](left, right);
};
var eR = new ExpressionRegistry;
eR.add('not', function(left, right) {
return left != right;
});
eR.add('>', function(left, right) {
return left > right;
});
eR.add('<', function(left, right) {
return left < right;
});
eR.add('>=', function(left, right) {
return left >= right;
});
eR.add('<=', function(left, right) {
return left <= right;
});
eR.add('==', function(left, right) {
return left == right;
});
eR.add('===', function(left, right) {
return left === right;
});
eR.add('!==', function(left, right) {
return left !== right;
});
eR.add('in', function(left, right) {
if ( ! isArray(right)) {
right = right.split(',');
}
return right.indexOf(left) !== -1;
});
var isHelper = function() {
var args = arguments
, left = args[0]
, operator = args[1]
, right = args[2]
, options = args[3]
;
// console.log(args);
if (args.length == 2) {
options = args[1];
if (left) return options.fn(this);
return options.inverse(this);
}
if (args.length == 3) {
right = args[1];
options = args[2];
if (left == right) return options.fn(this);
return options.inverse(this);
}
if (eR.call(operator, left, right)) {
return options.fn(this);
}
return options.inverse(this);
};
return isHelper;
};
在 assemble 中,您可以通过以下方式加载助手:
var isHelper = require(config.paths.path_src + 'partials/_helpers/is-helper'));
app.helper('is', isHelper());
请注意,从 is-helper
返回的函数在传递给 app.helper
之前被调用。这允许您将自定义选项传递给您的助手(例如,您在助手中使用的自定义表达式),但这取决于您。
希望对您有所帮助。
有以下 assemble 文件,一切都按预期加载。如果我使用 handlebars-helpers,该文件会编译,但它缺少我需要的助手。所以我不得不使用自定义助手 file/module
var gulp = require('gulp');
var rename = require('gulp-rename');
var assemble = require('assemble');
//var helpers = require('handlebars-helpers');
var app = assemble();
var prettify = require('gulp-prettify');
var config = require('../config');
gulp.task('init', function(cb) {
app.helpers(config.paths.path_src + 'partials/_helpers/is-helper.js');
//app.helper('compare', helpers.comparison());
app.partials(config.paths.path_src + 'templates/includes/**/*.hbs');
app.layouts(config.paths.path_src + 'templates/layouts/**/*.hbs');
app.pages(config.paths.path_src + 'templates/content/**/*.hbs');
cb();
});
gulp.task('assemble', ['init'], function() {
return app.toStream('pages')
.pipe(app.renderFile())
.pipe(prettify({
indent_inner_html: false,
preserve_newlines: true,
end_with_newline: true,
extra_liners: ['head', 'body']
}))
.pipe(rename({
extname: '.html'
}))
.pipe(rename({dirname: ''}))
.pipe(app.dest('site'));
});
gulp.task('test', ['assemble']);
现在我已经尝试过 handlebars-helper 但它没有我想要的帮助文件所以我不得不使用下面的文件:
/*
Custom handlebars helpers which allows to make
{{#is a '===' b}}}
{{/is}}
*/
module.exports.register = function (handlebars) {
var isArray = function(value) {
return Object.prototype.toString.call(value) === '[object Array]';
}
var ExpressionRegistry = function() {
this.expressions = [];
};
ExpressionRegistry.prototype.add = function (operator, method) {
this.expressions[operator] = method;
};
ExpressionRegistry.prototype.call = function (operator, left, right) {
if ( ! this.expressions.hasOwnProperty(operator)) {
throw new Error('Unknown operator "'+operator+'"');
}
return this.expressions[operator](left, right);
};
var eR = new ExpressionRegistry;
eR.add('not', function(left, right) {
return left != right;
});
eR.add('>', function(left, right) {
return left > right;
});
eR.add('<', function(left, right) {
return left < right;
});
eR.add('>=', function(left, right) {
return left >= right;
});
eR.add('<=', function(left, right) {
return left <= right;
});
eR.add('==', function(left, right) {
return left == right;
});
eR.add('===', function(left, right) {
return left === right;
});
eR.add('!==', function(left, right) {
return left !== right;
});
eR.add('in', function(left, right) {
if ( ! isArray(right)) {
right = right.split(',');
}
return right.indexOf(left) !== -1;
});
var isHelper = function() {
var args = arguments
, left = args[0]
, operator = args[1]
, right = args[2]
, options = args[3]
;
// console.log(args);
if (args.length == 2) {
options = args[1];
if (left) return options.fn(this);
return options.inverse(this);
}
if (args.length == 3) {
right = args[1];
options = args[2];
if (left == right) return options.fn(this);
return options.inverse(this);
}
if (eR.call(operator, left, right)) {
return options.fn(this);
}
return options.inverse(this);
};
handlebars.registerHelper('is', isHelper);
return eR;
};
我不断收到以下错误,缺少助手 "is"。好像没有注册! 请帮忙!!!
is
帮助文档是 here。
Also is there a way to import custom helpers?
这是描述here。
您不使用路径,而是使用 require
:
// single helper (required module returns the helper function)
app.helper('is', require('./helpers/is'));
// multiple helpers (required module returns an object of helper functions... e.g. key/value pairs)
app.helpers(require('./helpers'));
上面的自定义助手代码使用 grunt-assemble
语法来注册助手。在这种情况下,我会将您的助手更改为如下所示:
/*
Custom handlebars helpers which allows to make
{{#is a '===' b}}}
{{/is}}
*/
module.exports = function () {
var isArray = function(value) {
return Object.prototype.toString.call(value) === '[object Array]';
}
var ExpressionRegistry = function() {
this.expressions = [];
};
ExpressionRegistry.prototype.add = function (operator, method) {
this.expressions[operator] = method;
};
ExpressionRegistry.prototype.call = function (operator, left, right) {
if ( ! this.expressions.hasOwnProperty(operator)) {
throw new Error('Unknown operator "'+operator+'"');
}
return this.expressions[operator](left, right);
};
var eR = new ExpressionRegistry;
eR.add('not', function(left, right) {
return left != right;
});
eR.add('>', function(left, right) {
return left > right;
});
eR.add('<', function(left, right) {
return left < right;
});
eR.add('>=', function(left, right) {
return left >= right;
});
eR.add('<=', function(left, right) {
return left <= right;
});
eR.add('==', function(left, right) {
return left == right;
});
eR.add('===', function(left, right) {
return left === right;
});
eR.add('!==', function(left, right) {
return left !== right;
});
eR.add('in', function(left, right) {
if ( ! isArray(right)) {
right = right.split(',');
}
return right.indexOf(left) !== -1;
});
var isHelper = function() {
var args = arguments
, left = args[0]
, operator = args[1]
, right = args[2]
, options = args[3]
;
// console.log(args);
if (args.length == 2) {
options = args[1];
if (left) return options.fn(this);
return options.inverse(this);
}
if (args.length == 3) {
right = args[1];
options = args[2];
if (left == right) return options.fn(this);
return options.inverse(this);
}
if (eR.call(operator, left, right)) {
return options.fn(this);
}
return options.inverse(this);
};
return isHelper;
};
在 assemble 中,您可以通过以下方式加载助手:
var isHelper = require(config.paths.path_src + 'partials/_helpers/is-helper'));
app.helper('is', isHelper());
请注意,从 is-helper
返回的函数在传递给 app.helper
之前被调用。这允许您将自定义选项传递给您的助手(例如,您在助手中使用的自定义表达式),但这取决于您。
希望对您有所帮助。