首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel 5 dataTables,具有控制器功能的初始化表

Laravel 5 dataTables,具有控制器功能的初始化表
EN

Stack Overflow用户
提问于 2015-10-05 15:52:46
回答 2查看 3.6K关注 0票数 2

我正在尝试创建一个用户的dataTable,其中每行都有一个下拉子行,其中包含用户特权的复选框。因此,非常动态地,“超级”管理员可以单击用户并在表中分配他们的权限。

首先,不确定这是否是个好主意,所以可以建议一种更好的方法。也许每行简单的弹出模式会更容易,但就目前而言,我认为这将是一种很酷的方法,所以我继续前进。

然而,试图用阿贾克斯初始化dataTable却让我感到困惑。

PermissionsController.php

代码语言:javascript
复制
public function grid()
{
    //retrieve data from models
    $data['data'] = collect([ 'admins' => $admins, 'roles' => $roles ]);

        return $data;
}

routes.php

代码语言:javascript
复制
Route::get('user-permissions', 'PermissionsController@grid');

permissions.blade

代码语言:javascript
复制
<table class="table table-striped" id="admins_table" >
    <thead>
    <tr>
        <th>Last Name</th>
        <th>First Name</th>
        <th>Email</th>
        <th>Phone</th>
    </tr>
    </thead>
</table>

js

代码语言:javascript
复制
var oTable = $('#admins_table').dataTable( {
    "sDom": "<'row'<'col-md-6'l><'col-md-6'f>r>t<'row'<'col-md-12'p i>>",
    "aaSorting": [],
    "oLanguage": {
        "sLengthMenu": "_MENU_ ",
        "sInfo": "Showing <b>_START_ to _END_</b> of _TOTAL_ entries"
    },
    "ajax": {
       //here's where I'm trying to grab the data
       "url": "http://example.app/user-permissions", 
       "dataSrc": "data"
    },
    "columns": [
        { "data": "last_name" },
        { "data": "first_name" },
        { "data": "email" },
        { "data": "phone" }
    ]
});

Ajax

代码语言:javascript
复制
{
"data":
    {
    "admins":
    [{
        "id":31,
        "email":"example@gmail.com",
        "last_login":"2015-07-27 09:50:50",
        "first_name":"Gary",
        "last_name":"Barlow",
        "roles":[{
            "id":1,"slug":"admin"
        }]
    }],

    "roles":
    [
        {"id":3,"slug":"admin","name":"Admin"},
        {"id":7,"slug":"accounts","name":"Accounts"}, 
        {"id":8,"slug":"sales","name":"Sales"},
        {"id":9,"slug":"superAdmin","name":"SuperAdmin"}
    ]
    }
}

"admin“对象包括传递的所有管理员及其已经分配的角色。这些应显示为已在子行内勾选。" roles“对象将包含所有可用于分配其他角色的当前角色。基本上,这确定了需要出现的复选框的数量。

我已经把其余的抽象出来,因为上面的内容与初始化有关。非常感谢你的帮助。

尝试使用AJAX时,当我在浏览器中输入路由路径时,只会得到“表中没有可用数据”,就会得到JSON对象输出。

我不知道该怎么叫这条路。

代码语言:javascript
复制
url: '/user-permissions',
dataSrc: 'data.admins',
success: function (data) {
    console.log(data);
}

上述是否足够呢?我真的不想给整个世界打电话。我甚至添加了一个成功函数来尝试获取数据的控制台输出,但仍然没有结果。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-11-16 10:46:40

我已经有一段时间没有问这个问题了,我想我应该澄清一下我为解决这个问题做了些什么。首先,我确保所有数据表脚本都是最新版本,不确定这是否是一个问题,但我使用的是一些过时的东西。

在表初始化中,ajax调用变得简单了:

代码语言:javascript
复制
ajax: "/user-permissions"

大多数艰苦的工作进入了由上面的路由调用的控制器函数:

代码语言:javascript
复制
public function grid()
{
    $admins = // get users with relevant roles e.g. ($user->load('roles'))

    return Datatables::of($admins)->make(true)
}
票数 1
EN

Stack Overflow用户

发布于 2015-10-05 17:37:26

  1. 正确的dataSrc引用将是data.admins
  2. 你错过了样本数据中的admins[].phone吗?

据我所知,您希望显示一个用data.roles填充的data.roles,显示当前的data.admins[].roles[0].id

您可以通过在data.roles回调(或在xhr.dt事件中)中收集dataSrc并为角色列使用render方法来做到这一点:

代码语言:javascript
复制
<table class="table table-striped" id="admins_table" >
    <thead>
    <tr>
        <th>Last Name</th>
        <th>First Name</th>
        <th>Email</th>
        <th>Phone</th>
        <th>role</th>
    </tr>
    </thead>
</table>

js,只有重要的

代码语言:javascript
复制
var roles,
var oTable = $('#admins_table').dataTable( {
    "ajax": {
        "url": "http://example.app/user-permissions",  
        "dataSrc" : function(json) {
            roles = json.data.roles;
            return json.data.admins;
        }
    },
    "columns": [
        { "data": "last_name" },
        { "data": "first_name" },
        { "data": "email" },
        { "data": "phone" },
        { "data": "roles",
          "render": function(data, type, row) {
            var select = '<select>',
                role = data[0].id;
            for (var i=0;i<roles.length;i++) {
                select+='<option value="'+roles[i].id+'"';
                if (role == roles[i].id) select+=' selected';
                select+='>'+roles[i].name+'</option>';
            }
            select+='</select>';
            return select;
          }
       }
    ]
});

制作此表:

根据这些数据:

代码语言:javascript
复制
{ "data": {
    "admins": [{
        "id":31,
        "email":"example@gmail.com",
        "last_login":"2015-07-27 09:50:50",
        "first_name":"Gary",
        "last_name":"Barlow",
        "phone" : "123",
        "roles":[{
            "id":8,"slug":"sales"
        }]
    },{
        "id":32,
        "email":"example@yahoo.com",
        "last_login":"2015-07-27 09:50:50",
        "first_name":"Bary",
        "last_name":"Garlow",
        "phone" : "321",
        "roles":[{
            "id":7,"slug":"accounts"
        }]
    }],
    "roles": [
        {"id":3,"slug":"admin","name":"Admin"},
        {"id":7,"slug":"accounts","name":"Accounts"}, 
        {"id":8,"slug":"sales","name":"Sales"},
        {"id":9,"slug":"superAdmin","name":"SuperAdmin"}
    ]
  }
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32952710

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档