我模糊地说我应该在某种模拟应用中使用,其中向用户呈现一个网页,该网页显示来自多个域的数据并提供触摸多个域的各种交互。
在这种情况下,它是一个房地产模拟,其中UI演示显示有关房屋的用户数据,买卖的提议,用户谈判的状态等,有关"世界状况的信息"以及那种东西。页面中还有相当数量的ajax。
我可以只拥有一个与特定域无关的控制器,然后只提供所有不同的对象吗?也许使用命令对象来处理从用户返回的操作?
希望这个问题对于一个连贯的答案来说不是太模糊,我只是在寻找关于高级方法的建议。
答案 0 :(得分:4)
是的,您可以拥有一个与特定域不直接相关的控制器。例如,您可以创建DashboardController
。命令对象的使用取决于您和您的需要,但您可以像使用任何其他控制器一样在上述控制器中使用Domain实例。
答案 1 :(得分:1)
正如@Joshua Moore所说,这没问题,让我给一个小缩短的例子。 (希望它能给你一些想法...)
我在应用程序中使用bootstrap-theme,仪表板上的信息(几个统计小部件)是通过对仪表板控制器进行ajax调用生成的。
首先,UrlMappings.groovy文件:
类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']
});
}
});
}