Решено Сторонние js убивают работу csjs хпагесов

ty3uk

Well-known member
31.03.2008
170
0
#1
хотел порисовать схему для докуменооборота, взял библиотечку GoJS (
Для просмотра контента необходимо: Войти или зарегистрироваться
Для просмотра контента необходимо: Войти или зарегистрироваться
около 800кб). И не могу понять, толи я дурак, толи лыжи не смазал. Если на странице делать простейшую кнопку с кодом alert('hello!'); то всё работает. Но если вложить данную библиотеку, то перестаёт работать.

вот пример Хпагеса:
HTML:
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
<script type="text/javascript" src="js/go.js"></script>
<xp:button value="Label" id="button1">
<xp:eventHandler event="onclick" submit="false">
<xp:this.script><![CDATA[alert("Ура!");]]></xp:this.script>
</xp:eventHandler>
</xp:button>
</xp:view>
библиотека, соотвественно лежит под WebContent\js

Пытаюсь разобраться что и как. Дебажу страницу через браузер, и что вижу, кусок HTML страницы:
HTML:
<script type="text/javascript">
function view__id1__id2_clientSide_onclick(thisEvent) {
alert("Ура!");
}
XSP.addOnLoad(function() {
XSP.attachEvent("view:_id1:_id2", "view:_id1:button1", "onclick", view__id1__id2_clientSide_onclick, false, 2);
}); 
</script>
При этом кнопарь не работает. Поумал, подумал, и прям в консоль забил:
XSP.attachEvent("view:_id1:_id2", "view:_id1:button1", "onclick", view__id1__id2_clientSide_onclick, false, 2);
Потом нажимаю на кнопарь, работает!
Получается, что не отрабатывает XSP.addOnLoad(function() {...}); причём именно при вкладывании библиотечки.
Ктонибудь встречался с таким?
 

romych2004

Lotus team
01.04.2013
112
20
#2
Если не поздно) Но может и кому-то другому пригодится.
Если посмотреть библиотеку, то там снизу увидим:
JavaScript:
window && (window.module && "object" === typeof window.module && "object" === typeof window.module.exports ? window.module.exports = ca : window.define && "function" === typeof window.define && window.define.amd ? (window.go = ca, window.define(ca)) : window.go = ca);
"undefined" !== typeof module && "object" === typeof module.exports && (module.exports = ca);
Обратим внимание на это: window.define.amd
Это означает, что библиотека использует AMD. Как и dojo. Обычный конфликт. Исправьте window.define.amd на window.define.amd && false и все должно работать
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 601
277
#5
@romych2004 как-то кастыльно, может у библиотеки есть к-л штатный способ разрешения конфликтов для неймспейсов?
 

romych2004

Lotus team
01.04.2013
112
20
#6
@romych2004 как-то кастыльно, может у библиотеки есть к-л штатный способ разрешения конфликтов для неймспейсов?
Есть решение если убрать агрегацию ресурсов, но этим только хуже сделаете
 
Последнее редактирование:

romych2004

Lotus team
01.04.2013
112
20
#9
В первом случае отключается AMD у dojo(на сколько я понял), чем хуже сделаете
По второй ссылке не очень понял при чем здесь dojo

Тогда уж и вот еще:
Для просмотра контента необходимо: Войти или зарегистрироваться
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 601
277
#10