2016-05-21 4 views
1

В шаблоне с лезвием Laravel 5 у меня есть раздел <script>.Laravel blade @ включить в переменную Javascript?

В этом разделе мне нужно установить переменную в строку, которая исходит из другого шаблона клинка.

Я пытался что-то вроде:

<script> 
    var a = "@include 'sometext.blade.php' "; 
</script> 

, но это, очевидно, не работает.

Кроме того, включенное лезвие может содержать как одиночные, так и двойные кавычки, поэтому их нужно каким-то образом избежать, или Javascript не будет действителен.

Любые идеи?

ответ

1

Законченных нуждаясь схожей функциональностью при работе с DataTables и дополнительными действиями, которые HTML должен быть введен после факта через jQuery.

Сначала я created a helper function с этим (с Pass a PHP string to a JavaScript variable (and escape newlines)):

function includeAsJsString($template) 
{ 
    $string = view($template); 
    return str_replace("\n", '\n', str_replace('"', '\"', addcslashes(str_replace("\r", '', (string)$string), "\0..\37'\\"))); 
} 

Затем в шаблоне вы могли бы сделать что-то вроде:

$('div.datatable-toolbar').html("{!! includeAsJsString('sometext') !!}"); 

включить шаблон в sometext.blade.php лезвие вытекания из цитат и удаления новых строк.

0

Здание JS динамически всегда плохая идея, но если вам это действительно нужно, это должно работать:

<script> 
    var a = "@include('sometext')"; 
</script> 

Это будет включать в себя sometext.blade.php просмотреть содержание между ""

+0

Я продолжаю получать сообщение об ошибке «unterminited string literal», когда есть одиночные кавычки внутри включенного клинка (что должно быть разрешено даже без экранирования, я думаю). WIth просто строка и никаких кавычек вообще, она работает, но внутри встроенного клипа есть HTML, поэтому он содержит одиночные и/или двойные кавычки. – Dylan

+0

Это ошибка JS, поэтому Laravel (Blade) отлично работает здесь. Я думаю, проблема в другом месте, но не в использовании одинарных кавычек. Можете ли вы отправить сообщение 'sometext.blade.php', пожалуйста. –

+1

Обнаружили причину этого, внутри включенного лезвия были разломы. Javascript не любит строки в строке, они должны быть экранированы с \ в конце каждой строки. – Dylan

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