2015-05-23 3 views
1

Подобно тому, как мы можем использовать JS-шаблонные механизмы (например, Handlebars) для динамических значений вставки в HTML (например, <div>{{value inserted by JavaScript}}</div>), я хотел бы вставить код JavaScript в код JavaScript с тем же обозначением {{curly brackets}}. Например:Как использовать код JavaScript в JavaScript-коде?

var myFunction= {{My Function}}; 
var bar = myFunction(foo); 

запрограммированных в My Function шаблона:

function(foo) { 
    return foo+'bar'; 
} 

Я попытался Google, но я не получаю нигде, как все результаты о шаблонных движках JavaScript (например Handlebars).

Любая идея, как я мог бы достичь этого в JavaScript в браузере?

примечание 1: FYI причина, почему я хочу, чтобы достичь этой цели является создание функции JavaScript, я могу блок-тест в моем браузере, и использовать как есть (и без необходимости замены {{template}} кода) в функцию JavaScript, используемой Google Tag Manager, которые поддерживает {{curly brackets}} обозначение в его движке JavaScript.

примечание 2: если это слишком сложно, я буду использовать базовый язык (например, Twig в PHP), чтобы написать свой код JavaScript с помощью {{curly brackets}} и вернуть обычный JavaScript в браузер, чтобы мои модульные тесты работали и повторно использовались код, записанный в бэкэнд.

+0

Я не могу представить себе ситуацию, когда вы действительно нуждаетесь в этом, потому что вы всегда можете передать функции, как и любой другой JS объекта в качестве аргумента функции. Я не хочу говорить, что это может быть бесполезно, но вы действительно уверены, что вам это нужно? –

+0

Имея это, определенно было бы полезно, так как это позволило бы мне разработать + модульный тест моего кода, а затем буквально просто скопировать/вставить в Диспетчер тегов Google. Теперь я должен выполнить ручное редактирование, прежде чем переносить свой код на GTM, который подвержен ошибкам, и побеждает модульное тестирование, которое должно гарантировать, что мой код работает так, как должен. Мой экземпляр Диспетчера тегов Google используется для развертывания тегов аналитики на веб-сайтах, которые ежемесячно получают несколько миллионов посетителей, поэтому убедитесь, что все работает правильно, действительно важно. Вне этого контекста я не вижу себе, как это было бы полезно действительно :) – Max

+0

Ручки - за исключением экранирования - не ограничивается HTML, но может использоваться любой язык, на котором не будет синтаксиса, противоречащего Handlebars. В связи с этим вы можете использовать Handelbars, потому что '{{}}' нотация не будет существовать в js-коде. Но из-за экранирования вам нужно будет использовать '{{{}}}' или определить данные как SafeString. –

ответ

0

Вы можете использовать eval() для создания динамического JS-кода. Вот пример:

var getDynamicFunction = function(jsCode) { 
     return '(function() { return function() { ' + jsCode + ' }})()' 
    }, 
    codeToInsert = 'alert("I am created dynamically");'; 

myFunction = eval(getDynamicFunction(codeToInsert)); 
myFunction(); 

http://jsfiddle.net/pLk3nsv3/1/

+0

Спасибо. В самом деле, я знал об «eval», но я до сих пор не вижу, как я смогу использовать нотацию «{{template}}» в своем JavaScript-коде и заменить ее на другой JavaScript, используя эту технику. – Max

Смежные вопросы