2016-02-03 2 views
0

Я пытаюсь установить значения некоторых пользовательских локальных атрибутов в приложении Work Execution. Используя рекомендованный Скоттом подход использования dojo mixin (Work Log Default) для реализации пользовательской логики при использовании кода IBM для WorkOrderObject, в представлении списка не отображаются записи. Первоначально я думал, что сделал что-то неправильно, но похоже, что проблема заключается именно в использовании додзе-смеси с этой строкой в ​​WorkOrderObject, который вызывает другую функцию.Maximo Anywhere с использованием dojo mixin на WorkOrderObject onInitialize не отображает WorkList

this.refreshClassDescription(workOrder);

Если я комментирую эту строку в из коробки WorkOrderObject, мои настройки работы и список работ делает правильно. Я видел некоторую документацию Dojo об использовании safeMixin (Dojo safeMixin), которая должна помочь с некоторыми проблемами, связанными с использованием mixin, но, похоже, не разрешает эту проблему (получаю те же результаты, если я использую mixin или safeMixin).

Я проверял, что это не проблема внутри метода, вызываемого, потому что, если я прокомментирую всю логику в этом методе, он все еще не работает с использованием mixin. Мне нужен способ добавить свою собственную логику в WorkOrderObject, но не могу заставить ее работать в этом сценарии (использование mixin для всех остальных функций работает так, как ожидалось). Я не могу изменить файлы javascript из коробки, потому что будущие патчи от IBM заставят наши настройки потеряться.

Есть ли хороший способ объединить объект из окна и наш пользовательский объект и поддерживать его this.?

ответ

1

Стивен, является основной проблемой, что функция не существует, или что это ключевое слово, не существует в этой области видимости?

Если это второе, вам может просто понадобиться инициализировать локальную переменную self, чтобы сохранить эту ссылку в вашем коде mixin.

0

Скотт был прав, это проблема с прицелом. В итоге я много читал о JavaScript this., чтобы лучше понять проблему. JavaScript Binding, в частности, был чрезвычайно полезным для чтения. Я ранее имел var sg_originalInitialize = WorkOrderObject.onInitialize;. Используя var sg_originalInitialize = WorkOrderObject.onInitialize.bind(WorkOrderObject);, команды this. будут знать, как использовать объект WorkOrderObject, как и предполагалось (и, конечно же, он будет работать, даже если this. не существует). В этой статье перечислены несколько других вариантов, но это довольно чисто и очевидно с точки зрения кода.