Inicializace javascriptu po ajaxovém požadavku

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Lumeriol
Generous Backer | 63
+
0
-

Zdravím,

chtěl bych se zeptat, jakým způsobem inicializovat externí javascript + jeho funkce, pokud se před tím invaliduje ajaxový požadavek.

Konkrétněji, mám stránku o třech záložkách (login, registrace, zapomenuté heslo), s tím, že člověk přijde na login (zde skript funguje, načte jej normálně z layout souboru), ovšem při ajaxovém přechodu na registraci se javascript již neinicializuje. To samé, pokud načtu přímo registraci, ale přepínám záložky pro doručovací / fakturační adresu, opět znefunkční skript.

Jedná se o plugin Smartform, která se inicializuje pomocí externího skriptu a poté krátkého kódu, vesměs podobné jako například TinyMCE.

<script src=„http://smartform.cz/api/v1/smartform.js“></script>

<script>
smartform.beforeInit = function initialize() {
	smartform.setClientId('[zde doplňte klientské ID]');
}
</script>

Při vložení do snippetu naopak konzole řve „Failed to execute ‚write‘ on ‚Document‘: It isn't possible to write into a document from an asynchronously-loaded external script unless it is explicitly opened.“.

Tudíž jsem v tuto chvíli bezradný a rád bych požádal o radu, jak s tímto pohnout :)

CZechBoY
Člen | 3608
+
+1
-

Pokud používáš nette.ajax.js tak si udělej novou extension.

$.nette.ext('snippetSmartForm', {
	before: function () {
		unloadSmartForm();
	},
	success: function () {
		bindSmartForm();
	}
});

Editoval CZechBoY (3. 12. 2015 20:59)

Lumeriol
Generous Backer | 63
+
0
-

CZechBoY napsal(a):

Pokud používáš nette.ajax.js tak si udělej novou extension.

$.nette.ext('snippetSmartForm', {
	before: function () {
		unloadSmartForm();
	},
	success: function () {
		bindSmartForm();
	}
});

Tak jsem vyzkoušel tento, včetně dalších různých způsobů načtení skriptu, ale vždy skončím u chyby Failed to execute ‚write‘ on ‚Document‘: It isn't possible to write into a document from an asynchronously-loaded external script unless it is explicitly opened.

Nevím tak, zda je chyba přímo v připojovaném skriptu, kde mu vadí funkce document.write, nebo někde jinde. K funkci se v podstatě ani nedostanu.

galab
Backer | 74
+
0
-

Do @layout.latte dej:

<head>
....
<script src='http://smartform.cz/api/v1/smartform.js'></script>
<script>
smartform.beforeInit = function initialize() {
    smartform.setClientId('[zde doplňte klientské ID]');
}
</script>
</head>

a pak extension:

$.nette.ext('snippetSmartForm', {
  success: function () {
      smartform.rebindAllForms(true);
  }
});

Editoval galab (4. 12. 2015 15:44)

Lumeriol
Generous Backer | 63
+
0
-

galab napsal(a):

Do @layout.latte dej:

<head>
....
<script src='http://smartform.cz/api/v1/smartform.js'></script>
<script>
smartform.beforeInit = function initialize() {
    smartform.setClientId('[zde doplňte klientské ID]');
}
</script>
</head>

a pak extension:

$.nette.ext('snippetSmartForm', {
  success: function () {
      smartform.rebindAllForms(true);
  }
});

Díky moc, tohle funguje perfektně tak, jak má :)