我正在尝试创建一个简单的设置面板。 我想创建几个按钮,显示和更改某些选项的状态,并将其值在0和1之间切换。 基本上,我们在Stackoverflow中使用它来表达答案。
在友好的帮助下,我能够创建这个单一按钮,该按钮有效:
查看:
<div class="box_option flexvert invoke2">
@if(isset($userdata) && $userdata->ShowToolbar == 1)
<a data-remote="true" data-method="post" href="{{ route('switch.toggle_option') }}" id="experiment_update3" class="csh_07"> Activated</a>
@else
<a data-remote="true" data-method="post" href="{{ route('switch.toggle_option') }}" id="experiment_update3" class="csh_11"> Not Activated</a>
@endif
</div>
路线:
Route::post( '/usersettings/ajax_buttons3', array(
'as' => 'switch.toggle_option',
'uses' => 'UserWorkspacesController@toggle_option'
) );
控制器:
public function toggle_option() {
$ userdata = UserWorkspace :: where(&#39; user_id&#39;,&#39; =&#39;,Auth :: user() - &gt; id) - &gt; first();
if($userdata->ShowToolbar === 1)
{
$userdata->ShowToolbar = 0;
$response = array(
'toggle_update' => trans('messages.un_joined')
);
}
else
{
$userdata->ShowToolbar = 1; // This also handles newly created UserWorkspaces
$response = array(
'toggle_update' => trans('messages.joined')
);
}
$userdata->save();
return Response::json( $response );
}
JS:
$('a[data-remote=true]').on('ajax:beforeSend', function(xhr, settings) {
$(this).find('.dropdown-toggle').click();
});
$('a[data-remote=true]').on('ajax:success', function(xhr, data, status) {
$(this).text(data.toggle_update);
});
问题:
创建多个按钮,而无需在控制器方法或js中克隆代码。在Sisou的解决方案中,控制器不知道我想要更改哪个表 - 所以链接必须包含信息,对吗? 我需要c。单个视图中的20个按钮。 现在,我唯一想出的就是这个丑陋的嵌套IF(对不起):
路由::帖子(&#39;开关/ {选项}&#39;,数组( &#39;如&#39; =&GT; &#39; switch.toggle_option&#39 ;, &#39;使用&#39; =&GT; &#39; UserWorkspacesController @ toggle_option&#39; ));
并为每个要切换的选项/按钮分隔IF:
if($option = 1) {
if($userdata->ShowToolbar == 1)
{
$userdata->ShowToolbar = 0;
... and so on...
THX
答案 0 :(得分:1)
如果你想让相同的按钮将值从1更改为0或0更改为1,我建议你让服务器端处理相应的值,只需从按钮调用路径(不带任何参数)。所以你的按钮就是
<a data-remote="true" data-method="post" href="{{ route('join.join_an_action') }}" id="experiment_update">
您的控制器会检查数据库中当前的值,然后更改它:
if($setactionstatus->Ajaxtest === 1)
{
$setactionstatus->Ajaxtest = 0;
$response = array(
'interface_update' => trans('messages.un_joined')
);
}
else
{
$setactionstatus->Ajaxtest = 1; // This also handles newly created UserWorkspaces
$response = array(
'interface_update' => trans('messages.joined')
);
}
$setactionstatus->save();
至于其他按钮:您需要相对于链接进行DOM抓取:
$('a[data-remote=true]').on('ajax:beforeSend', function(xhr, settings) {
$(this).find('.dropdown-toggle').click();
});
$('a[data-remote=true]').on('ajax:success', function(xhr, data, status) {
$(this).text(data.interface_update);
});