背景: Object type TemplateComponent can't be mapped to a valid class
TemplateComponent 在 pentaho cde 下,不选择RequireJS Support ,无法使用。
如果选中,又会造成其他问题,D3、FusionCharts等第三方插件无法使用。
分析源码发现,TemplateComponent并没有放入到cdf-bootstrap-script-includes.js中。故对源码进行修改...
pentaho的cdf-bootstrap-script-includes.js文件,通过resources.properties配置
1.配置
resources.properties
script=js-legacy/components/template.js link=js/components/theme/TemplateComponent.css
js-legacy/components/template.js 文件从js/components/TemplateComponent.js拷贝,并进行适当的修改,一下代码是pentaho ctools cdf 8.3版本,将原Logger, Utils替换为Dashboards,修改后,代码如下:
/*! * Copyright 2002 - 2019 Webdetails, a Hitachi Vantara company. All rights reserved. * * This software was developed by Webdetails and is provided under the terms * of the Mozilla Public License, Version 2.0, or any later version. You may not use * this file except in compliance with the license. If you need a copy of the license, * please go to http://mozilla.org/MPL/2.0/. The Initial Developer is Webdetails. * * Software distributed under the Mozilla Public License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. Please refer to * the license for the specific language governing your rights and limitations. */ var TemplateComponent = UnmanagedComponent.extend({ defaults: { templateType: 'mustache', template: '<div>{{items}}</div>', rootElement: 'items', formatters: {}, events: [], postProcess: function() {} }, messages: { error: { noData: "No data available.", invalidTemplate: "Invalid template.", invalidTemplateType: "Invalid template type.", generic: "Invalid options defined. Please check the template component properties." }, success: {}, warning: {}, info: {}, config: { style: { success: {icon: "comment", type: "success"}, error: {icon: "remove-sign", type: "danger"}, info: {icon: "info-sign", type: "info"}, warning: {icon: "exclamation-sign", style: "warning"} }, template: "<div class='alert alert-<%=type%>' role='alert'>" + " <span class='glyphicon glyphicon-<%=icon%>' aria-hidden='true'></span> " + " <span> <%=msg%> </span>" + "</div>" } }, init: function() { $.extend(true, this, Dashboards.ev(this.extendableOptions)); $.extend(true, this.defaults, Dashboards.ev(this.options)); }, update: function() { _.bindAll(this, 'redraw', 'init', 'processData', 'renderTemplate', 'attachEvents', 'processMessage', 'template', 'applyFormatter', 'applyAddin', 'processAddins'); this.init(); this.triggerQuery(this.chartDefinition, this.redraw); }, redraw: function(data) { this.model = this.processData(data); var htmlResult = this.renderTemplate(this.template, this.templateType, this.model); var $target = this.placeholder(); $target.empty().append(htmlResult); this.processAddins($target, data); if(!_.isEmpty(this.events)) { this.attachEvents(this.eventSelector, this.eventType, this.eventHandler); } }, getUID: function() { return 'xxxxxxxx'.replace(/[xy]/g, function(c) { var r = Math.random() * 16 | 0, v = c === 'x' ? r : (r & 0x3 | 0x8); return v.toString(16); }); }, applyFormatter: function(model, formatter, id) { var formatHandler = Dashboards.propertiesArrayToObject(this.formatters)[formatter]; if(_.isFunction(formatHandler)) { return formatHandler.call(this, model, id); } else { return model; } }, applyAddin: function(model, addin, id) { var UID = this.name + "_" + addin + this.getUID(); this.addins = this.addins || []; this.addins.push({uid: UID, model: model, addin: addin, id: id}); return '<div id="' + UID + '" class="' + addin + '"/>'; }, processAddins: function($target, data) { var myself = this; _.each(this.addins, function(elem) { myself.handleAddin(_.first($target.find('#' + elem.uid)), elem.model, elem.addin, data, elem.id); }); }, handleAddin: function(target, model, addInName, data, id) { var addIn = this.getAddIn("templateType", addInName); var state = {value: model, data: data, id: id}; addIn.call(target, state, this.getAddInOptions("templateType", addIn.getName())); }, // Transform qyeryResult.dataset to JSON format to be used in Templates processData: function(queryResult) { if(!_.isFunction(this.modelHandler)) { var hasData = queryResult.queryInfo != null ? queryResult.queryInfo.totalRows > 0 : queryResult.resultset.length > 0; if(hasData) { var data = []; _.each(queryResult.resultset, function(row) { data.push(_.extend({}, row)); }); var model = {}; model[this.rootElement] = data; return model; } else { return ""; } } else { return this.modelHandler(queryResult); } }, // Apply template based on the result of a query. Creates a template based (mustache or underscore) view data object and apply columns format renderTemplate: function(template, templateType, model) { var html = ""; var myself = this; if((!_.isEmpty(model))) { var helpers = { formatter: function(data, formatter, id) { return myself.applyFormatter(data, formatter, id); }, addin: function(data, addin, id) { return myself.applyAddin(data, addin, id); } }; try { switch(templateType.toUpperCase()) { case 'UNDERSCORE': model = _.defaults({}, model, Dashboards.propertiesArrayToObject(helpers)); html = _.template(Dashboards.ev(template))(model); break; case 'MUSTACHE': Mustache.Formatters = helpers; html = Mustache.render(Dashboards.ev(template), model); break; default: html = this.processMessage('invalidTemplateType', 'error'); break; } } catch(e) { html = this.processMessage('invalidTemplate', 'error'); } } else { html = this.processMessage('noData', 'error'); } return html; }, // bind click to created cards attachEvents: function() { var myself = this; _.each(this.events, function(elem) { var separator = ',', handler = _.first(elem).split(separator), eventHandler = _.last(elem), event = _.first(handler).trim(), selector = _.last(handler).trim(); if(_.isFunction(eventHandler)) { myself.placeholder(selector).on(event, _.bind(eventHandler, myself)); } }); }, processMessage: function(message, type) { var completeMsg = { msg: this.messages[type][message] || message || "", type: this.messages.config.style[type].type || "info", icon: this.messages.config.style[type].icon || "comment" }; Dashboards.log(completeMsg.msg, type); return _.template(this.messages.config.template)(completeMsg); } });
2.
pentaho的cdf-bootstrap-script-includes.js文件,通过resources.properties配置
script=js-legacy/lib/shims.js,js-legacy/lib/pen-shim.js,js-legacy/lib/modernizr/modernizr-2.8.3.js,js-legacy/lib/jQuery/jquery.js,js-legacy/lib/underscore/underscore.js,js-legacy/lib/backbone/backbone.js,js-legacy/lib/mustache/mustache.js,js-legacy/lib/moment/moment.js,js-legacy/lib/CCC/def.js,js-legacy/lib/base64.js,js-legacy/lib/CCC/jquery.tipsy.js,js-legacy/lib/CCC/protovis.js,js-legacy/lib/CCC/protovis-msie.js,js-legacy/lib/CCC/tipsy.js,js-legacy/lib/CCC/cdo.js,js-legacy/lib/impromptu/jquery-impromptu.js,js-legacy/lib/jQuery/jquery.ui.js,js-legacy/lib/corner/jquery.corner.js,js-legacy/lib/bgiframe/jquery.bgiframe.js,js-legacy/lib/jdMenu/jquery.jdMenu.js,js-legacy/lib/positionBy/jquery.positionBy.js,js-legacy/lib/blockUI/jquery.blockUI.js,js-legacy/lib/eventstack/jquery.eventstack.js,js-legacy/lib/i18n/jquery.i18n.properties.js,js-legacy/lib/jquery-ui-datepicker-i18n.js,js-legacy/MetaLayer/MetaLayer.js,js-legacy/lib/fancybox/jquery.fancybox.js,js-legacy/lib/dataTables/js/jquery.dataTables.js,js-legacy/lib/uriQueryParser/jquery-queryParser.js,js-legacy/lib/base/Base.js,js-legacy/wd.js,js-legacy/Dashboards.Startup.js,js-legacy/cdf-base.js,js-legacy/cccHelper.js,js-legacy/cggHelper.js,js-legacy/inputHelper.js,js-legacy/Dashboards.Main.js,js-legacy/Dashboards.Notifications.js,js-legacy/Dashboards.RefreshEngine.js,js-legacy/Dashboards.Query.js,js-legacy/Dashboards.Utils.js,js-legacy/Dashboards.Legacy.js,js-legacy/Dashboards.AddIns.js,js-legacy/Dashboards.Bookmarks.js,js-legacy/AddIns.js,js-legacy/addIns/coltypes.js,js-legacy/queries/coreQueries.js,js-legacy/queries/xmlaQueries.js,js-legacy/OlapUtils.js,js-legacy/lib/json.js,js-legacy/MetaLayer/MetaLayer.js,js-legacy/lib/captify/captify.js,js-legacy/lib/CCC/pvc-d1.0.js,js-legacy/components/core.js,js-legacy/components/maps.js,js-legacy/components/simpleautocomplete.js,js-legacy/lib/chosen/chosen.jquery.js,js-legacy/lib/select2/select2.js,js-legacy/lib/hynds/jquery.multiselect.js,js-legacy/lib/backboneTreemodel/backbone.treemodel.js,js-legacy/lib/mCustomScrollbar/jquery.mCustomScrollbar.concat.min.js,js-legacy/lib/sanitizer/lib/html4.js,js-legacy/lib/sanitizer/lib/uri.js,js-legacy/lib/sanitizer/sanitizer.js,js-legacy/components/filter/lib/baseevents.js,js-legacy/components/filter/js/TreeFilter/TreeFilter.js,js-legacy/components/filter/js/TreeFilter/defaults.js,js-legacy/components/filter/js/TreeFilter/Logger.js,js-legacy/components/filter/js/TreeFilter/models/Tree.js,js-legacy/components/filter/js/TreeFilter/models/SelectionTree.js,js-legacy/components/filter/js/TreeFilter/templates.js,js-legacy/components/filter/js/TreeFilter/views/scrollbar/AbstractScrollBarHandler.js,js-legacy/components/filter/js/TreeFilter/views/scrollbar/OptiScrollBarEngine.js,js-legacy/components/filter/js/TreeFilter/views/scrollbar/MCustomScrollBarEngine.js,js-legacy/components/filter/js/TreeFilter/views/scrollbar/ScrollBarFactory.js,js-legacy/components/filter/js/TreeFilter/views/Abstract.js,js-legacy/components/filter/js/TreeFilter/views/Root.js,js-legacy/components/filter/js/TreeFilter/views/Group.js,js-legacy/components/filter/js/TreeFilter/views/Item.js,js-legacy/components/filter/js/TreeFilter/controllers/Manager.js,js-legacy/components/filter/js/TreeFilter/controllers/RootCtrl.js,js-legacy/components/filter/js/TreeFilter/strategies/AbstractSelect.js,js-legacy/components/filter/js/TreeFilter/strategies/MultiSelect.js,js-legacy/components/filter/js/TreeFilter/strategies/SingleSelect.js,js-legacy/components/filter/js/TreeFilter/extensions/renderers.js,js-legacy/components/filter/js/TreeFilter/extensions/sorters.js,js-legacy/components/filter/js/TreeFilter/data-handlers/InputDataHandler.js,js-legacy/components/filter/js/TreeFilter/data-handlers/OutputDataHandler.js,js-legacy/components/filter/js/TreeFilter/addIns/addIns.js,js-legacy/components/filter/js/filter.js,js-legacy/components/ccc.js,js-legacy/components/input.js,js-legacy/components/table.js,js-legacy/components/template.js,js-legacy/components/Pentaho.XAction.js,js-legacy/components/Pentaho.JPivot.js,js-legacy/components/Pentaho.Analyzer.js,js-legacy/components/VisualizationAPIComponent.js,js-legacy/lib/CCC/compatVersion.js,js-legacy/components/navigation.js,js-legacy/components/Pentaho.Reporting.js link=js-legacy/lib/CCC/tipsy.css,js-legacy/lib/jdMenu/jquery.jdMenu.css,js-legacy/lib/jdMenu/jquery.jdMenu.slate.css,js-legacy/lib/impromptu/jquery-impromptu.css,js-legacy/lib/fancybox/jquery.fancybox.css,js-legacy/cdf.css,js-legacy/lib/dataTables/css/jquery.dataTables_themeroller.css,js-legacy/lib/dataTables/css/jquery.dataTables.css,js-legacy/lib/captify/captify.css,js-legacy/lib/chosen/chosen.css,js-legacy/lib/select2/select2.css,js-legacy/lib/select2/select2-bootstrap.css,js-legacy/lib/hynds/jquery.multiselect.css,js-legacy/lib/mCustomScrollbar/jquery.mCustomScrollbar.min.css,js-legacy/components/filter/styles/filter.css,js/components/theme/TemplateComponent.css
3. 重新启动服务器,TemplateComponent就可以不选择RequireJS Support 的情况下,有效果了。OK了...
相关推荐
A filter is an object that performs filtering tasks on either the request to a resource (a servlet or static content), or on the response from a resource, or both. Filters perform filtering in the ...
A series of physical locations, with unique addresses, that can be used to store instructions or data. AWE – Address Windowing Extensions A 32-bit process is normally limited to addressing 2 ...
34)..Changed: EurekaLog 7 now can be installed over EurekaLog 6 automatically, with no additional actions/tools EurekaLog 7.4 (7.4.0.0), 26-January-2016 1)....Fixed: Performance issue in DLL exports...
SSO单点登录概要设计说明书.doc
奥塔北煤矿6.0 Mta新井设计说明书.docx
内容概要:本文详细介绍了基于S7-200 PLC和组态王软件构建喷泉控制系统的全过程。首先明确了系统的IO分配,包括启动按钮、停止按钮以及喷泉水泵的连接方式。接着展示了梯形图程序的设计,涵盖了基本的启停控制逻辑、定时循环和模式切换机制。随后提供了详细的接线图原理图,解释了输入输出部分的具体接线方法。最后讲述了组态王的画面设计,包括创建工程、定义变量和绘制监控界面等步骤。此外还分享了一些调试过程中遇到的问题及解决方案。 适合人群:对自动化控制感兴趣的初学者和技术人员,尤其是那些希望深入了解PLC编程和人机界面设计的人群。 使用场景及目标:适用于小型喷泉项目的实际控制系统开发,旨在帮助读者掌握PLC编程技巧、熟悉组态软件的应用,并能够独立完成类似的自动化控制系统设计。 其他说明:文中不仅包含了理论知识讲解,还附带了许多实践经验分享,如硬件配置建议、常见错误规避措施等,有助于提高实际操作能力。
计算机二级PPT精选二十套(标红)
保险公司IT变更管理流程设计说明书.doc.doc
毕业设计说明书A江坝后式厂房双曲拱坝设计.pdf
内容概要:文档《计算机二级MS精选300道选择题.docx》涵盖了计算机二级考试中Microsoft Office软件(Word、Excel、PowerPoint)及计算机基础知识的选择题。题目涉及软件操作技巧、功能应用、常见问题解决等方面,旨在帮助考生熟悉并掌握相关知识点,提高应试能力。文档内容详尽,涵盖面广,从基础操作到高级应用均有涉及,适合考生全面复习备考。 适用人群:准备参加计算机二级考试的学生及相关从业人员,特别是需要强化Office软件操作技能和计算机基础知识的人员。 使用场景及目标:①考生可以在复习过程中使用这些选择题进行自我检测,巩固所学知识;②教师可以将其作为教学辅助材料,帮助学生更好地理解和掌握课程内容;③培训机构可以用这些题目作为测试题库,评估学员的学习效果。 其他说明:文档不仅提供了大量的选择题,还详细解析了每道题目的答案,有助于考生深入理解知识点。此外,题目内容紧跟最新考试大纲,确保考生能够获得最有效的备考资料。
内容概要:本文介绍了一种创新的方法,利用多目标黏菌优化算法(MOSMA)来优化支持向量机(SVM)的参数C和gamma,从而提高回归预测的效果。首先详细解释了MOSMA的工作原理,包括黏菌权重更新、快速非支配排序以及自适应参数调整等关键技术点。接着展示了具体的Python代码实现,涵盖数据预处理、适应度函数定义、参数更新规则等方面。实验结果显示,在风电功率预测等多个应用场景中,相较于传统的网格搜索方法,MOSMA能够更快更有效地找到最优参数组合,显著提升了预测性能。 适合人群:从事机器学习研究或应用开发的技术人员,尤其是关注SVM参数优化及回归预测领域的从业者。 使用场景及目标:适用于需要进行高效参数寻优的回归预测任务,如风电功率预测、设备负载预测等。主要目标是通过改进SVM参数配置,获得更高的预测精度和更好的泛化能力。 其他说明:文中提供了完整的代码示例和详细的实施步骤指导,帮助读者快速理解和应用这一先进的优化技术。此外,还讨论了一些常见的注意事项和技术细节,如数据标准化、参数范围设定、并行化改造等。
毕业设计 某油库设计说明书.pdf
Q235钢板焊接工艺设计说明书.docx
75t循环流化床锅炉设计说明书.doc
(最新修订版)直列四缸柴油机配气机构设计毕业论文设计说明书.doc
内容概要:《deepseek大模型生态报告 2025年2月》详细介绍了DeepSeek大模型的背景、应用现状、技术特点及其产业生态。DeepSeek由杭州深度求索公司创立,通过一系列技术创新,如多层注意力架构(MLA)、FP8混合精度训练框架、DualPipe跨节点通信等,显著降低了训练成本和提高了模型性能。DeepSeek在国内和国际市场迅速崛起,登顶苹果应用商店免费APP下载排行榜,并被多家企业和机构接入,包括华为、三大运营商、微软、英伟达等。其开源策略和低成本优势对全球科技供应链和资本市场产生了深远影响,尤其是在AI领域。 适合人群:对人工智能、大模型技术感兴趣的科技爱好者、研究人员、企业家及政策制定者。 使用场景及目标:①了解DeepSeek大模型的技术创新和应用现状;②探讨DeepSeek对全球AI产业生态的影响;③分析DeepSeek在不同行业(如金融、医疗、教育、制造等)的具体应用案例。 其他说明:报告还涵盖了各国政府及相关机构对DeepSeek的态度和政策回应,以及DeepSeek对未来AI技术发展和国际竞争格局的启示。此外,报告深入剖析了DeepSeek在技术架构、数据策略和工程实践方面的突破,揭示了其成功背后的组织文化和创新机制。
内容概要:本文详细介绍了利用粒子群算法解决电动汽车区域综合能源系统中光伏电站、充电桩运营商和电网公司在定价上的三方博弈问题。通过MATLAB代码实现了粒子群算法的具体应用,包括参数设置、适应度函数设计、粒子更新策略以及结果可视化。文中展示了如何将三方定价变量编码成多维粒子,并通过目标函数计算和约束处理确保粒子在合理的解空间内搜索最优解。最终得到的电价曲线反映了不同时间段内的供需变化,验证了算法的有效性和实用性。 适合人群:从事能源系统优化、智能算法应用的研究人员和技术开发者。 使用场景及目标:适用于需要进行能源系统优化调度的场景,特别是涉及多方利益协调的问题。目标是找到光伏电价、充电桩电价和电网电价的最佳组合,使得三方利益达到最优平衡。 其他说明:建议在调试过程中关注特定时段的电价突变,适当调整参数如社会认知系数和社会学习因子,以获得更好的收敛效果。此外,初始粒子的位置选择对收敛速度有很大影响,推荐采用高斯扰动等方法进行初始化。
WY02锥齿轮的加工工艺规程及工时定额计算 课程设计说明书.docx
项目管理制度范文.docx
内容概要:本文深入探讨了双馈风力发电机(DFIG)的仿真建模及其关键技术模块。首先介绍了最大功率跟踪(MPPT)模块的工作原理,利用爬山算法优化风能利用率。接着详细讲解了转子侧变流器的矢量控制,包括坐标变换、PI调节器参数设定以及抗饱和处理。文中还讨论了网侧变流器的直流电压控制方法,强调了双闭环结构的重要性,并分享了低电压穿越仿真的实践经验。此外,文章详细解释了功率解耦控制和变速恒频实现的技术细节,提供了丰富的故障案例和调试技巧。 适合人群:从事风电工程研究和技术开发的专业人士,尤其是对DFIG仿真建模感兴趣的工程师和研究人员。 使用场景及目标:适用于希望深入了解DFIG内部机制的研究人员,帮助他们掌握从基本原理到复杂控制策略的设计与实现。同时,也为实际工程项目提供宝贵的调试经验和故障排除指南。 其他说明:文章不仅涵盖了理论分析,还包括大量实用的代码片段和具体的参数配置建议,确保读者能够顺利构建并运行仿真模型。