2016-09-18 10 views
1

Я смутно о том, что я должен использовать в своего рода приложение для моделирования, где пользователю предоставляется веб-страница, представляющая данные из нескольких доменов и предоставляющая различные взаимодействия, которые касаются нескольких доменов.Какой контроллер использовать для пользовательского интерфейса стиля «приборной панели», который касается нескольких доменов

В данном случае это моделирование недвижимости, где презентация пользовательского интерфейса показывает пользовательские данные о домах, предлагает покупать и продавать, статус переговоров пользователей и т. Д., Информацию о «состоянии мира» и такого рода вещь. Справедливое количество ajax происходит и на странице.

Могу ли я просто иметь контроллер, который не связан с конкретным доменом, а затем просто предоставить все разные объекты? Может быть, использовать объект команды для обработки действий, возвращающихся от пользователя?

Надеюсь, этот quesiton не слишком расплывчатый для последовательного ответа, я просто ищу предложения по высокоуровневому подходу.

+0

Можно даже пойти дальше и создать общую функциональность это не большой пример, но дает вам представление о том https://github.com/vahidhedayati/jssh/ blob/master/grails-app/controllers/grails/plugin/jssh/ConnectSshController.groovy # L306, который вызывает https://github.com/vahidhedayati/jssh/blob/master/grails-app/services/grails/plugin/jssh /j2ssh/JsshDbStorageService.groovy – Vahid

ответ

4

Да, у вас может быть контроллер, который напрямую не коррелирует с определенным доменом. Например, вы можете создать DashboardController. Использование объектов команды зависит от вас и ваших потребностей, но вы можете использовать экземпляр домена в вышеуказанном контроллере, как и любой другой контроллер.

1

Как @Joshua Мур заявил, что это не проблема, позвольте мне привести небольшой - сокращенный пример. (надеюсь, что это дает вам немного идеи ...)

Я использую в приложении тему начальной загрузки, а информация на панели управления (несколько статистических виджетов) генерируется через 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'] 
      }); 
     } 
    }); 
}