NetteForms.js – nefunguje s MooTools
- Matěj Konečný
- Člen | 3
Zdravím,
v Nette Framework 2.0-dev (revision f195947 released on 2010–12–16) je
v netteForms.js chyba (a koukal jsem se na GitHub, ale chyba pořád není
opravena). Projeví se tehdy, když se použije knihovna upravující prototype
(asi) Object nebo Array – na řádcích 191 a 192 je
následující kód:
<script>
for (var id in rules) {
var rule = rules[id], op = rule.op.match(/(~)?([^?]+)/);
</script>
Je-li upravený Object (nebo Array).prototype, tak se do id dostanou i hodnoty, které tam vlastně nemají co dělat. Dá se to vyřešit kontrolou hasOwnProperty, ale nevím, jakou má podporu v prohlížečích. Nezkoumal jsem onen soubor nijak detailněji, pravděpodobně se tam stejná chyba bude objevovat vícekrát.
Editoval Matěj Konečný (5. 2. 2011 20:09)
- redhead
- Člen | 1313
Ono s tím se nedá nic moc dělat, jedině že bys sám přepsal všechny foreache na nějaký MooTools iterator (aspoň Prototype (framework) vlastní má). Není trestné si ten skript upravit.
Edit: viz http://mootools.net/…Types/Object#…
Editoval redhead (5. 2. 2011 20:19)
- Matěj Konečný
- Člen | 3
Já vím a udělám si to, ale myslím si, že přidání
if(!rules.hasOwnProperty(id))
continue;
by to mohlo vyřešit, nebo ne?
//EDIT: Teď jsem našel, že IE to asi nepodporuje..
Editoval Matěj Konečný (5. 2. 2011 20:27)
- redhead
- Člen | 1313
Snažil jsem se něco najít o hasOwnProperty a vypadá to, že by to měli podporovat všechny majoritní prohlížeče (snad i včetně IE6). Ale ruku do ohně za to nedám.
Na druhou stranu se mi moc nelíbí tam ten kód dávat, který, dovolím si říct, 90% lidí nepotřebuje, protože používají jQuery.
- Lopata
- Člen | 139
hasOwnProperty má podporu dobrou. Není důvod to nepoužívat. Jednodušší přístup ale je
<script>
for (var id in rules) {
if (rules.hasOwnProperty(id)) {
var rule = rules[id], op = rule.op.match(/(~)?([^?]+)/);
// ...
}
}
</script>
EDIT: předběhnut…
Editoval Lopata (5. 2. 2011 21:12)
- Matěj Konečný
- Člen | 3
Podle mě by měl být kód pokud možno robustní, ošetřovat všechny možné případy. Což znamená, že bych hasOwnProperty použil – předejde se tím možným chybám a ušetří se plno práce s hledáním příčiny chyby lidem jako já. Kromě toho mám pocit, že se poslední dobou dostává upravování prototype nativních tříd trochu víc do popředí.
- Lopata
- Člen | 139
redhead napsal(a):
Na druhou stranu se mi moc nelíbí tam ten kód dávat, který, dovolím si říct, 90% lidí nepotřebuje, protože používají jQuery.
Kdyby se při psaní netteForms.js počítalo s jQuery, byl by o notnou část kratší. Navíc s modifikací prototypů může pracovat i programátor, co jQuery používá. Myslím, že pár hasOwnProperty by bylo více v souladu s Nette politikou „nic Vám nenutíme“.
- David Grudl
- Nette Core | 8228
fixed
(tady je pěkně vidět, jaké je znečišťování globálního prostředí svinstvo)