涉及多个域的 'dashboard' 样式 UI 使用什么控制器

What controller to use for 'dashboard' style UI which touches multiple domains

我不清楚我应该在一种模拟应用程序中使用,在这种应用程序中,用户会看到一个网页,该网页显示来自多个域的数据并提供涉及多个域的各种交互。

在这种情况下,它是一个房地产模拟,其中 UI 演示文稿显示有关房屋的用户数据、买卖报价、用户谈判状态等,有关 "state of the world" 的信息以及这种事情。页面中也有相当数量的 ajax。

我可以只拥有一个不与特定域关联的控制器,然后只提供所有不同的对象吗?也许使用命令对象来处理用户返回的操作?

希望这个问题不会太模糊,无法给出连贯的答案,我只是在寻找有关高级方法的建议。

是的,您可以拥有一个不直接关联到特定域的控制器。例如,您可以创建一个 DashboardController。命令对象的使用取决于您和您的需要,但您可以像使用任何其他控制器一样在上述控制器中使用域实例。

正如@Joshua Moore 所说,没问题,让我举一个简短的小例子。 (希望它能给你一些想法...)

我在应用程序中使用了一个 bootstrap 主题,仪表板上的信息(几个统计小部件)是通过 ajax 调用仪表板控制器生成的。

首先,UrlMappings.groovy 文件:

class UrlMappings {

static mappings = {
    "/$controller/$action?/$id?(.$format)?"{
        constraints {
            // apply constraints here
        }
    }

    "/"(controller: "dashboard", action:"index")
    "500"(view:'/error')
}

}

然后控制器代码:

package example

import java.util.Random
import grails.converters.JSON
import groovy.time.TimeCategory

class DashboardController {

    def index() {}

    def contractAmountAsJson() { ...someCode; return Data as JSON... }

}

然后 index.gsp 页面:

<!DOCTYPE html>
<html>
<head>
<meta name="layout" content="main">
<g:set var="entityName" value="${message(code: 'syParameter.label', default: 'SyParameter')}" />
<title><g:message code="default.list.label" args="[entityName]" /></title>
</head>
<body>
<!-- NEW WIDGET START -->
<article class="col-xs-12 col-sm-6 col-md-6 col-lg-6">
    <!-- Widget ID (each widget will need unique ID)-->
    <div class="jarviswidget" id="wid-id-8" data-widget-editbutton="false">
        <header>
            <span class="widget-icon"> <i class="fa fa-bar-chart-o"></i> </span>
            <h2>Vertragsvolumen aktiver Kunden-Verträge pro Monat</h2>
        </header>

        <!-- widget div-->
        <div>
            <!-- widget edit box -->
            <div class="jarviswidget-editbox">
                <!-- This area used as dropdown edit box -->
            </div>
            <!-- end widget edit box -->

            <!-- widget content -->
            <div class="widget-body no-padding">
                <div id="customerContractAmount" class="chart no-padding"></div>
            </div>
            <!-- end widget content -->
        </div>
        <!-- end widget div -->
    </div>
    <!-- end widget -->
</article>
</body>
</html>

以javascript为例:

if ($('#customerContractAmount').length) {
    $.ajax({
        url: '${request.contextPath}/dashboard/contractAmountAsJson?type=customer',
        dataType: 'json',
        success: function(chartData) {
            Morris.${session?.user?.statisticStyle ? session.user.statisticStyle : "Area"}({
                element : 'customerContractAmount',
                data : chartData,
                xkey : 'period',
                ykeys : ['a', 'b', 'c'],
                labels : ['bestätigt', 'erstellt', 'in Arbeit']
            });
        }
    });
}