0

我正在尝试在 Work Execution 应用程序中设置一些自定义本地属性的值。使用 Scott 推荐的使用 dojo mixin ( Work Log Default ) 的方法来实现自定义逻辑,同时仍然为 WorkOrderObject 使用定义的 IBM 代码,这会导致列表视图不显示任何记录。最初我以为我做错了什么,但似乎问题是专门使用 dojo mixin 和 WorkOrderObject 中的这一行调用另一个函数。

this.refreshClassDescription(workOrder);

如果我在开箱即用的 WorkOrderObject 中将此行注释掉,我的自定义设置就会起作用,并且工作列表会正确呈现。我看到了一些关于使用 safeMixin ( Dojo safeMixin ) 的 dojo 文档,它应该有助于解决与使用 mixin 相关的一些问题,但似乎无法解决这个问题(无论我使用 mixin 还是 safeMixin,我都会得到相同的结果)。

我已经验证它在被调用的方法中不是问题,因为如果我注释掉该方法中的所有逻辑,使用 mixin 仍然会失败。我需要一种能够将我自己的逻辑添加到 WorkOrderObject 的方法,但不能让它在这种情况下工作(对所有其他函数使用 mixin 可以按预期工作)。我无法修改开箱即用的 javascript 文件,因为来自 IBM 的未来补丁会导致我们的定制丢失。

有没有一种好方法可以将开箱即用的对象和我们的自定义对象结合起来并让它支持this.功能?

4

2 回答 2

1

史蒂文,根本问题是该函数不存在,还是该范围内不存在this关键字?

如果是第二个,您可能只需要初始化一个局部变量 self 以将 this 引用存储在您的 mixin 代码中。

于 2016-02-05T16:47:18.083 回答
0

斯科特是对的,这是一个范围问题。我最终阅读了很多关于 JavaScript 的内容this.,以更好地理解这个问题。JavaScript Binding尤其是一本非常有用的读物​​。我以前有var sg_originalInitialize = WorkOrderObject.onInitialize;. 通过使用var sg_originalInitialize = WorkOrderObject.onInitialize.bind(WorkOrderObject);this.命令将知道按预期使用 WorkOrderObject(当然即使 athis.不存在也仍然有效)。那篇文章列出了一些其他选项,但从代码的角度来看,这是非常干净和明显的。

于 2016-02-05T20:18:55.160 回答