Сгенерируйте Javascript с помощью веточки в Symfony 3.0 без использования {} в коде Javascript

Ребята, я пытаюсь ro генерировать способ, которым я буду в состоянии получить URL-адреса каждого вызова ajax с помощью функции пути ветки. Причина, по которой я это делаю, заключается в том, что я пытаюсь создать одностраничное приложение с использованием Knockout MVVM и require.js, поэтому мне нужны вызовы Ajax и мне нужно, чтобы URL генерировались динамически.

Я делаю так, что создаю маршрут:

  /**
*@Route("/ajax.js",name="ajax_calls")
*/
public function ajax_calls(Request $request)
{
$response=$this->render('javascript/ajax_calls.js.twig');
$response->headers->set('Content-Type', 'application/javascript');

return $response;
}

И я загружаю конкретный шаблон (javascript / ajax_calls.js.twig):

/**
*Returns the urls of the calls we need
*/
define([],function($)
{

return {
/**
*Urls for the albums (aka image groups)
*/
'albums':{
'get':function()
{
return "{{path('user_groups')}}";
},
'add':function()
{
return "{{path('group_add')}}";
}
'delete':function()
{
return "{{path('group_delete')}}";
}
'edit':function()
{
return "{{path('group_update')}}";
}
},
/**
*Urls for the Images
*/
'images':{
'add':function(group_id)
{
return "{{path('add_images', group_id='^group_id^')}}".replace("^group_id^",group_id);
},
'delete':function()
{
return "{{path('delete_images')}}";
}
}
};
});

Я использую fefine, потому что хочу иметь возможность загружаться с require.js, и, как вы можете видеть, я пытаюсь сгенерировать объект, который возвращает URL для определенной части одностраничного приложения.

Но как-то на линии:

    'albums':{

Есть конфликт, и я не знаю, как его избежать.

Конкретная ошибка, которую я получаю:

Arguments must be separated by a comma. Unexpected token "punctuation" of value ":" ("punctuation" expected with value ",") in main.js.twig at line 11.

Знаете ли вы, как решить эту проблему или альтернативный способ получить URL-адреса в виде объекта Javascript (путем их динамического создания)?

Примечание: я также видел https://github.com/FriendsOfSymfony/FOSJsRoutingBundle/blob/master/Resources/doc/index.md как размещено на Параметр URL Ajax с использованием пути Twig

Но это не помогает мне в том, как я спроектировал приложение (я использую модели представлений и хочу сохранить как можно более четкие модели представлений от URL-адресов и загружать их извне).

Также я буду выпускником альтернативного способа сделать это.


Изменить 1:

Я пробовал с:

/**
*Returns the urls of the calls we need
*/
define([],function($)
{

return {
/**
*Urls for the albums (aka image groups)
*/
'albums': {% verbatim %} { {% endverbatim %}
'get':function()
{% verbatim %}   { {% endverbatim %}
return "{{path('user_groups')}}";
},
'add':function()
{% verbatim %} { {% endverbatim %}
return "{{path('group_add')}}";
}
'delete':function()
{% verbatim %} { {% endverbatim %}
return "{{path('group_delete')}}";
}
'edit':function()
{% verbatim %} { {% endverbatim %}
return "{{path('group_update')}}";
}
},
/**
*Urls for the Images
*/
'images': {% verbatim %} { {% endverbatim %}
'add':function(group_id)
{% verbatim %} { {% endverbatim %}
return "{{path('add_images', group_id='^group_id^')}}".replace("^group_id^",group_id);
},
'delete':function()
{% verbatim %} { {% endverbatim %}
return "{{path('delete_images')}}";
}
}
};
});

И возвращает ошибку:

Arguments must be separated by a comma. Unexpected token "punctuation" of value ":" ("punctuation" expected with value ",") in main.js.twig at line 11.

Edit2:

Я также получаю ту же ошибку с:

{% verbatim %}
/**
*Returns the urls of the calls we need
*/
define([],function($)
{

return {
/**
*Urls for the albums (aka image groups)
*/
'albums':{
{% endverbatim %}
'get':function()
{
return "{{path('user_groups')}}";
},
'add':function()
{
return "{{path('group_add')}}";
}
'delete':function()
{
return "{{path('group_delete')}}";
}
'edit':function()
{
return "{{path('group_update')}}";
}
{% verbatim %}
},
/**
*Urls for the Images
*/
'images':{
{% endverbatim %}
'add':function(group_id)
{
return "{{path('add_images', group_id='^group_id^')}}".replace("^group_id^",group_id);
},
'delete':function()
{
return "{{path('delete_images')}}";
}
{% verbatim %}
}
};
});
{% endverbatim %}

Изменить 3:

Я понял, что я создаю другой файл JavaScript. Контроллер генерирует его, используя main.js.twig:

requirejs.config({
baseUrl:'{{asset('')}}',
paths:{
'text':'assets/vendor/js/text.min',

'knockout':["https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.0/knockout-min",'assets/vendor/js/knockout.min'],
'pager':"{{asset('assets/vendor/js/pager.min')}}",
'jquery':"{{asset('assets/vendor/js/jquery.min')}}",
'boostrap':"{{asset('assets/vendor/js/bootstrap.min')}}",

'ajax':"{{path('ajax_calls')|replace('.js':'')}}",

{% block Viewmodels %}
{% endblock %}

'compMessage':'assets/js/components/message',
'extBooleanToggle':'assets/js/extenders/booleanToggle',
},
shim:{
'pager':['knockout'],
'bootstrap':['jquery'],
},
waitSeconds: 200,
});

{% block initFunction %}
{% endblock %}

И проблема, которая генерирует это строка:

'ajax':"{{path('ajax_calls')|replace('.js':'')}}",

В этой строке я пытаюсь сгенерировать «фальшивый» файл .js без .js, чтобы требовать .js для его загрузки с расширением .js.

1

Решение

Если это действительно ваш код … вам не хватает 2 запятых, одна после добавлять метод и другой после удалять:

{
'get': function ()
{
return "{{path('user_groups')}}";
},
'add': function ()
{
return "{{path('group_add')}}";
},
'delete': function ()
{
return "{{path('group_delete')}}";
},
'edit': function ()
{
return "{{path('group_update')}}";
}
}

Это не прут связанная проблема вообще я думаю.

0

Другие решения

Я изменил строку:

'ajax':"{{path('ajax_calls')|replace('.js':'')}}",

с:

'ajax':"{{path('ajax_calls')|trim('.js')}}",

На main.js.twig и работает как шарм!

0

По вопросам рекламы [email protected]