我正在使用 Sprockets 编译 Eco 模板并将它们连接为一个 JS 文件。
因此,例如,如果我有这两个模板:
模板1.jst.eco:
<b>Awesome template 1</b>
模板2.jst.eco:
<b>Awesome template 2</b>
然后我使用 Sprocketsrequire
指令将它们包含在一个文件中:
# example.coffee
#= require 'templates/template1'
#= require 'templates/template2'
html = JST['templates/template1']()
moreHtml = JST['templates/template2']()
的编译/连接输出example.js
是(警告,生成的长代码):
(function() {
this.JST || (this.JST = {});
this.JST["templates/template1"] = function(__obj) {
if (!__obj) __obj = {};
var __out = [], __capture = function(callback) {
var out = __out, result;
__out = [];
callback.call(this);
result = __out.join('');
__out = out;
return __safe(result);
}, __sanitize = function(value) {
if (value && value.ecoSafe) {
return value;
} else if (typeof value !== 'undefined' && value != null) {
return __escape(value);
} else {
return '';
}
}, __safe, __objSafe = __obj.safe, __escape = __obj.escape;
__safe = __obj.safe = function(value) {
if (value && value.ecoSafe) {
return value;
} else {
if (!(typeof value !== 'undefined' && value != null)) value = '';
var result = new String(value);
result.ecoSafe = true;
return result;
}
};
if (!__escape) {
__escape = __obj.escape = function(value) {
return ('' + value)
.replace(/&/g, '&')
.replace(/</g, '<')
.replace(/>/g, '>')
.replace(/"/g, '"');
};
}
(function() {
(function() {
__out.push('<b>Awesome template 1</b>\n');
}).call(this);
}).call(__obj);
__obj.safe = __objSafe, __obj.escape = __escape;
return __out.join('');
};
}).call(this);
(function() {
this.JST || (this.JST = {});
this.JST["templates/template2"] = function(__obj) {
if (!__obj) __obj = {};
var __out = [], __capture = function(callback) {
var out = __out, result;
__out = [];
callback.call(this);
result = __out.join('');
__out = out;
return __safe(result);
}, __sanitize = function(value) {
if (value && value.ecoSafe) {
return value;
} else if (typeof value !== 'undefined' && value != null) {
return __escape(value);
} else {
return '';
}
}, __safe, __objSafe = __obj.safe, __escape = __obj.escape;
__safe = __obj.safe = function(value) {
if (value && value.ecoSafe) {
return value;
} else {
if (!(typeof value !== 'undefined' && value != null)) value = '';
var result = new String(value);
result.ecoSafe = true;
return result;
}
};
if (!__escape) {
__escape = __obj.escape = function(value) {
return ('' + value)
.replace(/&/g, '&')
.replace(/</g, '<')
.replace(/>/g, '>')
.replace(/"/g, '"');
};
}
(function() {
(function() {
__out.push('\n<b>Awesome template 2</b>\n');
}).call(this);
}).call(__obj);
__obj.safe = __objSafe, __obj.escape = __escape;
return __out.join('');
};
}).call(this);
(function() {
var html, moreHtml;
html = JST['templates/template1']();
moreHtml = JST['templates/template2']();
}).call(this);
这个 JS 工作正常,但问题是它复制了 Eco 为每个包含的模板生成的所有辅助模板渲染函数。在具有少量模板的项目中,不难想象这些辅助功能的代码可以超过实际模板的代码。
有没有办法配置 Srpockets/Eco 以便它重新使用辅助功能而不是复制它们?