ASPNETZERO - 如何更改索引页面以呈现切片而不是表格

时间:2017-12-13 01:29:14

标签: javascript asp.net asp.net-mvc asp.net-core aspnetboilerplate

我目前有一个普通的ASPNETZERO索引页面,它会呈现带有搜索功能的数据表网格。我想改变这个视图来渲染" tiles"对于网格中的每一行。我已经有了用于渲染切片工作的CSS / HTML。我基本上想要重新使用下面的index.js代码来渲染我的tile,而不是数据表格。

(function () {
$(function () {
    var _$companyTable = $('#companyTable');
    var _companyService = abp.services.app.company;

    var _permissions = {
        create: abp.auth.hasPermission('Pages.Tenant.Administration.Company.Create'),
        edit: abp.auth.hasPermission('Pages.Tenant.Administration.Company.Edit'),
        impersonation: abp.auth.hasPermission('Pages.Tenants.Impersonation'),
    };

    var _createModal = new app.ModalManager({
        viewUrl: abp.appPath + 'Nursing/Company/CreateModal',
        scriptUrl: abp.appPath + 'view-resources/Areas/Nursing/Views/Company/_CreateModal.js',
        modalClass: 'CreateCompanyModal'
    });

    var _editModal = new app.ModalManager({
        viewUrl: abp.appPath + 'Nursing/Company/EditModal',
        scriptUrl: abp.appPath + 'view-resources/Areas/Nursing/Views/Company/_EditModal.js',
        modalClass: 'EditCompanyModal'
    });

    var dataTable = _$companyTable.DataTable({
        paging: true,
        serverSide: true,
        processing: true,
        responsive: true,
        listAction: {
            ajaxFunction: _companyService.getCompanies,
            inputFilter: function () {
                return {
                    filter: $('#CompanyTableFilter').val()
                };
            }
        },
        columnDefs: [
            {
                targets: 0,
                data: null,
                orderable: false,
                autoWidth: true,
                defaultContent: '',
                rowAction: {
                    cssClass: 'btn btn-xs btn-primary blue',
                    text: '<i class="fa fa-cog"></i> ' + app.localize('Actions') + ' <span class="caret"></span>',
                    items: [{
                        text: app.localize('Edit'),
                        visible: function () {
                            return _permissions.edit;
                        },
                        action: function (data) {
                            _editModal.open({ id: data.record.id });
                        }
                    }]
                }
            },
            {
                targets: 1,
                orderable: true,
                autoWidth: true,
                data: "companyName"
            },
            {
                targets: 2,
                orderable: true,
                autoWidth: true,
                data: "companyLegalName"
            },
            {
                targets: 3,
                autoWidth: true,
                data: "companyTaxID"
            },
            {
                targets: 4,
                orderable: true,
                autoWidth: true,
                data: "currency"
            }
        ]
    });


    function getCompanies() {
        dataTable.ajax.reload();
    }

    $('#CreateNewCompanyButton').click(function (e) {
        _createModal.open();
    });

    $('#GetCompaniesButton').click(function (e) {
        e.preventDefault();
        getCompanies();
    });

    abp.event.on('app.editCompanyModalSaved', function () {
        getCompanies(true);
    });

    abp.event.on('app.createCompanyModalSaved', function () {
        getCompanies(true);
    });

    $('#CompanyTableFilter').focus();

});

如何更改上面的JS代码来渲染我的tile而不是数据表?我还想保留瓷砖的搜索功能。上面JS代码中使用的应用程序服务方法GetCompanies用于渲染我的切片。因此API调用将保持不变。

以下是我想要的输出来自上面的JS代码。 enter image description here

以下是当前标准ABP索引页面视图。我想用上面的瓷砖替换它。 enter image description here

1 个答案:

答案 0 :(得分:0)

我找到了一个解决方案。我通过添加下面显示的方法更改了index.js代码。我正在使用API​​方法的AJAX调用,然后使用结果来渲染我的平铺输出。这对我有用。 如果有人发现这种方法有任何问题,请告诉我。

        function getCompanies() {
        $.ajax({
            type: 'GET',
            url: '/api/services/app/Company/GetCompanies',
            dataType: 'json',
            success: function (companies) {
                var _tileHtml = "";
                //Iterate thru JSON list of values
                $.each(companies.result.items, function (i, company) {
                    //Tile content start
                    _tileHtml = "<div class='SingleTileContent inline-block'>";
                    //Header
                    _tileHtml += "<div class='Tile-header'>";
                    _tileHtml += "<div class='pull-left inline-block'>";
                    _tileHtml += "<div class='badge badge-info'>" + company.id + "</div>";
                    _tileHtml += "</div>";
                    _tileHtml += "<div class='pull-left inline-block text-bold'> | " + company.companyName + "</div>";
                    _tileHtml += "</div>";
                    //Body start
                    _tileHtml += "<div class='Tile-body text-left'>";
                    //Body row
                    _tileHtml += "<div class='Tile-body-detail'>";
                    _tileHtml += "<label>Legal Name</label> " + company.companyLegalName + "</div>";
                    //Body row
                    _tileHtml += "<div class='Tile-body-detail'>";
                    _tileHtml += "<label>Tax Id</label> " + company.companyTaxID + "</div>";
                    //Body end
                    _tileHtml += "</div>";
                    //Buttons (footer)
                    _tileHtml += "<div class='Tile-buttons'>";
                    _tileHtml += "<a href='javascript:;' class='btn btn-xs blue btnEdit' id='EditCompanyButton'>Edit<i class='fa fa-edit'></i></a>";
                    _tileHtml += "</div>";
                    //Tile content end
                    _tileHtml += "</div>";
                    $("#TestJS2").append(_tileHtml);

                });
                Count = 0;
            },
            error: function (ex) {
                abp.notify.error('Failed to retrieve companies' + ex);
            }
        });
    }