涉及多个域的 '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']
});
}
});
}
我不清楚我应该在一种模拟应用程序中使用,在这种应用程序中,用户会看到一个网页,该网页显示来自多个域的数据并提供涉及多个域的各种交互。
在这种情况下,它是一个房地产模拟,其中 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']
});
}
});
}