目标:
从下拉菜单中我点击一个项目,该值从该视图传递到控制器和控制器获取它,它修改了它的区域设置(也就是说,它将提供另一种导航语言)。如果我手动修改语言环境,我会得到一个很好的界面翻译,因为我已经在Lang Directories等创建了文件。
我遇到的轻微(但阻塞)问题:
由于下拉菜单中有很多项目(每个项目都对应一种语言),我必须精确指出“onclick”完全引用该项目。我不太确定语法是如何进行的,也许是来自父级的一些.children,所以当点击任何一个孩子时,它的值就会被发送。
这是代码:
HTML
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Pick Language<b class="caret"></b></a>
<ul class="dropdown-menu">
<li><a href="{{URL::route('index')}}" id="french" value="fr">Français</a></li>
<li><a href="{{URL::route('index')}}" id="english" value="en">English</a></li>
<li><a href="{{URL::route('index')}}" id="spanish" value="es">Castellano</a></li>
<li><a href="{{URL::route('index')}}" id="german" value="de">Deutsch</a></li>
<li><a href="{{URL::route('index')}}" id="russian" value="ru">русский</a></li>
</ul>
</li>
这里是JQUERY:
<script>
$('#english').click(function () {
var selectedlanguage = $('#english').val();
$.ajax({
url: '{!!"languagechooser"!!}>',
data: { 'locale' : selectedlanguage},
type: "post",
cache: false,
success: function (savingStatus) {
echo "now in English";
},
error: function (xhr, ajaxOptions, thrownError) {
$('#lblCommentsNotification').text("Error encountered while saving the comments.");
}
});
});
</script>
这里是控制者
public function languagechooser()
{
echo "recibe \Input::get('locale')";
\Session::set('locale', \Input::get('locale'));
return \Redirect::back();
}
而且我相信我仍然必须在“过滤器”中进行操作,但是LARAVEL 5.0没有它们; INSTEAD我已经阅读过使用MIDDLEWARE,或者在服务提供商等的BOOT功能中使用这些功能。
public function boot(Router $router)
{
\Lang::setLocale(\Session::get('Locale'));
parent::boot($router);
}
我非常喜欢并理解整个过程,但我不掌握语法,Jquery应该能够从任何单击的语言中接收值。
非常感谢
答案 0 :(得分:0)
将每个列表项中的锚点设为“选择语言”类。作为Tim Lewis mentioned in his comment,我也不确定是否允许在锚中使用value
属性。我将其更改为数据属性以确保此标记有效。
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Pick Language<b class="caret"></b></a>
<ul class="dropdown-menu">
<li><a href="{{URL::route('index')}}" class="choose-language" id="french" data-value="fr">Français</a></li>
<li><a href="{{URL::route('index')}}" class="choose-language" id="english" data-value="en">English</a></li>
<li><a href="{{URL::route('index')}}" class="choose-language" id="spanish" data-value="es">Castellano</a></li>
<li><a href="{{URL::route('index')}}" class="choose-language" id="german" data-value="de">Deutsch</a></li>
<li><a href="{{URL::route('index')}}" class="choose-language" id="russian" data-value="ru">русский</a></li>
</ul>
</li>
使用jQuery,您可以为该类设置click-handler并使用$(this)
获取单击的元素:
$('.choose-language').on('click', function () {
var selectedlanguage = $(this).data('value');
$.ajax({
url: 'languagechooser',
data: { 'locale' : selectedlanguage},
type: "post",
cache: false,
success: function (savingStatus) {
console.log(savingStatus);
},
error: function (xhr, ajaxOptions, thrownError) {
$('#lblCommentsNotification').text("Error encountered while saving the comments.");
}
});
});
我稍微清理了你的JavaScript。没有必要用Blade回显AJAX URL。现在,对于data-value
属性,您可以使用$(this).attr('data-value')
或$(this).data('value')
获取其值。
希望这能回答你的问题!