こんにちは、タスク用とリマインダー用の 2 つのテンプレートをレンダリングする taskReminder というページがあります。タスクには、チェックボックスをオンにすると、タスクリストを再入力/更新する必要があるチェックボックスがあります。すべてが正常に機能していますが、理解できないように見えるのは、タスクフレームが更新され、その中にページ全体が表示される理由です。要約すると、ページ全体にはタスクフレームがあり、その中にページ全体が表示されます(インセプションのように!)htmlを再設計し、リモート関数を再評価し、リマインダーフレーム内に差分チェックボックスを入れてみました-チェックを入れると、自分のフレームリストではなく、タスクフレーム内のリマインダーリストをページ全体で更新します。
最初の読み込み時、チェックボックスはクリックされていません - 表示は問題ありません
チェックボックスがチェックされ、タスクフレームが下にスクロールされると、リマインダーフレームもそこにあるか、ページ全体が表示されていることに注意してください
これはなぜですか?私のコード:タスクリマインダーホルダー用
<%@ page import="com.irondata.icmgrails.constants.*" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="layout" content="main" />
<style type="text/css">
body {background-color:#EEF2F7;}
</style>
<script type="text/javascript" language="javascript" src="${resource(dir:'js',file:'icmutilities.js')}"></script>
</head>
<body role="main">
<g:form>
<g:hiddenField name="caseId" value="${cmCaseInstance?.id}" />
<div class="body" role="article">
<h1>Tasks and Reminders</h1>
<br />
<br />
<div id="tasks">
<div class="summary">
<div class="summaryHeader">
<div class="summaryHeaderLeft">Tasks</div>
<div class="summaryHeaderCenter"> </div>
<div class="summaryHeaderRight"> </div>
</div>
<div class="gadgetShort">
<div>
<g:checkBox name='test' onclick="${remoteFunction(action:'workCategory', params:'\'completed=\'+ this.checked + \'&caseId=\' + caseId.value', update:[success:'divTasks', failure:'divTasks']) }" value="${false}"/>
</div>
<div id="divTasks">
<g:render template="taskList" model="['taskInstanceList': taskInstanceList, 'taskInstanceTotal': taskInstanceTotal, 'cmCaseInstance':cmCaseInstance]"/>
</div>
</div>
</div>
</div>
<div id="reminders">
<div class="summary">
<div class="summaryHeader">
<div class="summaryHeaderLeft">Reminders</div>
<div class="summaryHeaderCenter"> </div>
<div class="summaryHeaderRight"> </div>
</div>
<div class="gadgetShort">
<div>
<span class="gadgetName">Reminder List</span><span class="gadgetNumber">${taskInstanceTotal}</span>
</div>
<div id="divReminders">
<g:render template="reminderList" model="['reminderList': reminders, 'reminderListTotal': reminderCount]"/>
</div>
</div>
</div>
</div>
</div>
</g:form>
</body>
</html>
タスク リストとリマインダー リストはまったく同じなので、リマインダー リストのコードは入れませんでした。
<span class="gadgetName">Task List</span><span class="gadgetNumber">${taskInstanceTotal}</span>
<table cellspacing="0" cellpadding="0" id="tasksTableGrails" class="icmSortableTable" summary="Tasks" >
<thead>
<tr>
<g:sortableColumn scope="col" property="activityDescrip" title="${message(code: 'taskByCase.description.label', default: 'Description')}" params="${flash}" />
</tr>
</thead>
<g:each in="${taskInstanceList}" status="i" var="taskInstance">
<tr class="${(i % 2) == 0 ? '' : 'altRowColor'}">
<td>${fieldValue(bean: taskInstance, field: "activityTypeIdActivityType.activityDescrip")}</td>
</g:each>
</table>
ここに私のコードビハインドがあります:
def workCategory = {
def isCompletedTaskIncluded
flash.employeeId = params.employeeId
flash.caseId = params.caseId
def cmCaseInstance = CmCase.get(params.caseId as Long)
def employee = employeeService.getUserEmployee(session.currentUser.id)
def criteria = Task.createCriteria()
def query = {
eq ("cmCaseIdCmCase", cmCaseInstance)
or {
eq ("fromEmplIdEmployee", Employee.get(employee.id))
eq ("toEmplIdEmployee", Employee.get(employee.id))
}
if(params.completed=="false")
isNull("actCompDate")
}
def taskInstanceList = criteria.list(query)
def reminders = Reminder.createCriteria().list() {
createAlias("cmCaseIdCmCase", "cmCase")
isNull("cmCase.closedDate")
eq('employeeIdEmployee', employee)
eq("cmCaseIdCmCase", cmCaseInstance)
}
def taskCount = taskInstanceList.size()
def reminderCount = reminders.size()
render(view: "taskReminder", model: [taskInstanceList: taskInstanceList, taskInstanceTotal: taskCount, reminderList: reminders, reminderListTotal: reminderCount, cmCaseInstance:cmCaseInstance])
}