Этот вопрос больше похож на общий вопрос javascript и не относится к рулю.Тем не менее, я использую рули и, чтобы объяснить вопрос более четко, я привел примеры с использованием рулей.
Я хочу использовать рули в качестве движка шаблонов.Пользователь может предоставить свой собственный шаблон, CSS и контекст, который заполняет заполнители шаблона во время выполнения.
Рули также поддерживают вспомогательные функции, которые могут выполняться во время выполнения, как упомянуто здесь http://handlebarsjs.com/.
Эти функциибудет предоставлена мне в виде строки, и мне придется зарегистрировать их самостоятельно в javascript.
например, если функция:
Handlebars.registerHelper('fullName', function(person) {
return person.firstName + " " + person.lastName;
});
Строка функции будет stringFunction = 'return person.firstName + " " + person.lastName;'
Я не могу зарегистрировать этих помощников.
Я пытался использоватьnew Function(stringFunction)
, но есть некоторые проблемы, которые я не могу решить, например:
- Как передать параметр (человек в приведенном выше примере) в функцию?
например, нижеприведенная функция не работает:
customRegister(string_function){
handlebars.registerHelper('fullName', function(person) {
(new Function(string_function)).apply(person);
});
}
2.Как получить доступ к переменным, импортированным в область?
, например, для следующей функции в виде строки:
string_function = 'var emotion = Handlebars.escapeExpression(this.emotion),
name = Handlebars.escapeExpression(this.name);
return new Handlebars.SafeString(
"<button>I agree. I " + emotion + " " + name + "</button>"
);'
customRegister(string_function){
handlebars.registerHelper('fullName', function() {
(new Function(string_function)).apply(person);
});
}
Даже если я импортировал Handlebars
, он не определен в функции.
Возможно ли это в javascript?