Я делаю это так: создаю маршрут:
Код: Выделить всё
/**
*@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;
}
Код: Выделить всё
/**
*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')}}";
}
}
};
});
Но как-то онлайн:
Код: Выделить всё
'albums':{
Конкретная ошибка, которую я получаю:
Код: Выделить всё
Arguments must be separated by a comma. Unexpected token "punctuation" of value ":" ("punctuation" expected with value ",") in main.js.twig at line 11.
Примечание : Я также видел https://github.com/FriendsOfSymfony/FOS ... c/index.md, опубликованный в параметре URL-адреса Ajax с использованием Twig. path
Но это не помогает мне понять, как я разработал приложение (я использую модели представлений и хочу, чтобы модели представлений были максимально понятны из URL-адресов и загружались извне).< /p>
Также я буду благодарен за альтернативный способ сделать это.
Редактировать 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.
Я также получаю ту же ошибку с:
Код: Выделить всё
{% 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 %}
Я понял, что генерирую еще один файл 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':'')}}",
Подробнее здесь: https://stackoverflow.com/questions/361 ... th-in-java