ajax按钮显示和更改数据库字段的状态 - Laravel 4

时间:2014-12-06 04:17:45

标签: jquery ajax laravel

我正在尝试创建一个简单的设置面板。 我想创建几个按钮,显示和更改某些选项的状态,并将其值在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);
});

问题:

  1. 创建多个按钮,而无需在控制器方法或js中克隆代码。在Sisou的解决方案中,控制器不知道我想要更改哪个表 - 所以链接必须包含信息,对吗? 我需要c。单个视图中的20个按钮。 现在,我唯一想出的就是这个丑陋的嵌套IF(对不起):

    路由::帖子(&#39;开关/ {选项}&#39;,数组(     &#39;如&#39; =&GT; &#39; switch.toggle_option&#39 ;,     &#39;使用&#39; =&GT; &#39; UserWorkspacesController @ toggle_option&#39; ));

  2. 并为每个要切换的选项/按钮分隔IF:

    if($option = 1) {
    if($userdata->ShowToolbar == 1)
    {
        $userdata->ShowToolbar = 0;
     ... and so on...
    

    THX

1 个答案:

答案 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);
});