Maximo Anywhere - 动态更改元素的 CSS class
Maximo Anywhere - Dynamically changing CSS class of element
如标题所示,我想知道是否可以在 Maximo Anywhere 应用程序中使用 javascript 来动态更改在app.xml 文件如下:
<text cssClass="relatedRecords"/>
在我的方法有 运行 之后,我希望文本元素属于不同的 CSS class:
<text cssClass="boldRelatedRecords"/>
当然app.xml实际上并没有像上面那样更新,但我认为它更好地说明了我想要实现的目标。感觉这应该是一件很容易做的事情,但我一直没能弄清楚该怎么做。有没有人设法做到这一点?
感谢任何建议。
几周前我正在研究这个确切的要求。
这是我在渲染元素时使用的事件处理程序,如果 LOCATE Prereq 字段中的日期已过期,则使用一些额外的逻辑来设置 class:
hideForNonLocatePrereq: function(eventContext) {
var prereqType='LOCATE';
var wo = eventContext.application.getResource('workOrder').getCurrentRecord();
var prereq = wo.getLoadedModelDataSetOrNull('tasklist');
prereq.filter("plusdprereqtype == ", prereqType);
if(prereq.count()>0){
var expDate = prereq.data[0].getAsDateOrNull("zxqexpirationdate");
if(expDate==null){
eventContext.setDisplay(false);
}else{
wo.setDateValue('localzxqexpirationdate', expDate);
if (expDate < this.application.getCurrentDateTime()) {
eventContext.textWidget.domNode.className+= ' errorIndicator';
}
}}
else{
eventContext.setDisplay(false)
}
},
在 app.xml 中,我通过以下方式将该函数绑定到字段的呈现:
<container id="WorkExecution.WorkDetialView_container_102_added_exp" resource="workOrder">
<group id="WorkExecution.WorkDetailView_group_12_prereq">
<groupitem id="WorkExecution.WorkDetailView_group_12_prereq_2" layout="WorkOrderDetails3x3x3x3">
<text editable="false" id="WorkExecution.WorkDetailView_workOrder_groupitem_expdate" label="Locates Expiration Date" layoutInsertAt="item1" resourceAttribute="localzxqexpirationdate">
<eventHandlers id="WorkExecution.WorkDetailView_workOrder_groupitem_expdate_eventHandlers">
<eventHandler class="application.handlers.WODetailHandler" event="render" id="WorkExecution.WorkDetailView_workOrder_groupitem_expdate_eventHandlers_render" method="hideForNonLocatePrereq"/>
</eventHandlers>
</text>
</groupitem>
</group>
</container>
我们使用 .errorIndicator class 并覆盖 View.JS 中的验证的另一种策略,以允许视图中存在 class。我们只是 return true 离开屏幕。然后只需设置所需的字段元数据,如果未填写,它将动态设置 class。
multiAssetLoc.getRuntimeFieldMetadata('zxqfail').set('required', true);
第三种方法有点老套,但它涉及到重新设置 dom 元素上的 CSS,然后刷新视图。我们放弃了它,因为它需要更新 UI 才能发生。
如标题所示,我想知道是否可以在 Maximo Anywhere 应用程序中使用 javascript 来动态更改在app.xml 文件如下:
<text cssClass="relatedRecords"/>
在我的方法有 运行 之后,我希望文本元素属于不同的 CSS class:
<text cssClass="boldRelatedRecords"/>
当然app.xml实际上并没有像上面那样更新,但我认为它更好地说明了我想要实现的目标。感觉这应该是一件很容易做的事情,但我一直没能弄清楚该怎么做。有没有人设法做到这一点?
感谢任何建议。
几周前我正在研究这个确切的要求。
这是我在渲染元素时使用的事件处理程序,如果 LOCATE Prereq 字段中的日期已过期,则使用一些额外的逻辑来设置 class:
hideForNonLocatePrereq: function(eventContext) {
var prereqType='LOCATE';
var wo = eventContext.application.getResource('workOrder').getCurrentRecord();
var prereq = wo.getLoadedModelDataSetOrNull('tasklist');
prereq.filter("plusdprereqtype == ", prereqType);
if(prereq.count()>0){
var expDate = prereq.data[0].getAsDateOrNull("zxqexpirationdate");
if(expDate==null){
eventContext.setDisplay(false);
}else{
wo.setDateValue('localzxqexpirationdate', expDate);
if (expDate < this.application.getCurrentDateTime()) {
eventContext.textWidget.domNode.className+= ' errorIndicator';
}
}}
else{
eventContext.setDisplay(false)
}
},
在 app.xml 中,我通过以下方式将该函数绑定到字段的呈现:
<container id="WorkExecution.WorkDetialView_container_102_added_exp" resource="workOrder">
<group id="WorkExecution.WorkDetailView_group_12_prereq">
<groupitem id="WorkExecution.WorkDetailView_group_12_prereq_2" layout="WorkOrderDetails3x3x3x3">
<text editable="false" id="WorkExecution.WorkDetailView_workOrder_groupitem_expdate" label="Locates Expiration Date" layoutInsertAt="item1" resourceAttribute="localzxqexpirationdate">
<eventHandlers id="WorkExecution.WorkDetailView_workOrder_groupitem_expdate_eventHandlers">
<eventHandler class="application.handlers.WODetailHandler" event="render" id="WorkExecution.WorkDetailView_workOrder_groupitem_expdate_eventHandlers_render" method="hideForNonLocatePrereq"/>
</eventHandlers>
</text>
</groupitem>
</group>
</container>
我们使用 .errorIndicator class 并覆盖 View.JS 中的验证的另一种策略,以允许视图中存在 class。我们只是 return true 离开屏幕。然后只需设置所需的字段元数据,如果未填写,它将动态设置 class。
multiAssetLoc.getRuntimeFieldMetadata('zxqfail').set('required', true);
第三种方法有点老套,但它涉及到重新设置 dom 元素上的 CSS,然后刷新视图。我们放弃了它,因为它需要更新 UI 才能发生。