Страницы: 1
Может кто-нибудь встречался с неправильной обработкой <listbox> ?
Исходный текст:
<?xml version="1.0"?>
<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
<window
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
style="overflow: auto;" align="left" valign="top"
>
<script type="text/javascript; e4x=1">
<![CDATA[
function testParser() {
var b1 = document.getElementById('b1');
var b2 = document.getElementById('b2');
var fragment1 =
<box xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<button label="fragment1"/>
</box>;
b1.appendChild((new DOMParser()).parseFromString(fragment1.toXMLString(), 'text/xml').documentElement);
var fragment2 =
<box xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<listbox id="theList2">
<listitem label="Ruby"/>
<listitem label="Emerald"/>
<listitem label="Sapphire"/>
<listitem label="Diamond"/>
</listbox>
<button label="fragment2"/>
</box>;
b2.appendChild((new DOMParser()).parseFromString(fragment2.toXMLString(), 'text/xml').documentElement);
}
]]>
</script>
<listbox id="theList">
<listitem label="Ruby"/>
<listitem label="Emerald"/>
<listitem label="Sapphire"/>
<listitem label="Diamond"/>
</listbox>
<box>
<button label="testParser" oncommand="testParser();"/>
</box>
<hbox>
<box id="b1"/>
<box id="b2"/>
</hbox>
</window>
Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8)
Gecko/20051107 Firefox/1.5
Отсутствует
olegs2, в чём выражается "неправильность" обработки ? Расскажите, дайте скриншот и т. д.
А вообще, в вашем коде по-меньшей мере 4 ошибки:
1.
... var fragment1 = <box xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> <button label="fragment1"/> </box>; ...
Впервые вижу такую конструкцию (может, я чего-то не знаю ?). По-моему, правильно будет так:
... var fragment1 = '<box xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">\ <button label="fragment1"/>\ </box>'; ...
* Теперь переменная fragment1 определена и имеет тип string.
(Важно: теги должны следовать друг за другом, без текстовых узлов между ними - вот так: <tag1><tag2><...<tagn/>...></tag2></tag1>)
2.
Ну нет у string метода toXMLString() (я опять чего-то не знаю ?). С учётом моей поправки (1), я бы записал этот участок кода так:
3, 4. Аналогично 1, 2 - но в отношении переменной fragment2.
Отредактировано Anton (23-11-2005 16:24:28)
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
Anton, спасибо за развернутый ответ!
Я пытаюсь использовать расширение e4x, добавленное в javascript, начиная с версии Firefox 1.5.
Конструкции вида var v = <tag>; работают и сильно сокращают и упрощают исходный код.
Обнаружил неработоспособность пока только тега <listbox>, который "почти collapsed".
Кстати, проблем с fragment1 как раз нет.
Отсутствует
...Я пытаюсь использовать расширение e4x, добавленное в javascript, начиная с версии Firefox 1.5...
Ага, вот чего я не знаю.
...Обнаружил неработоспособность пока только тега <listbox>, который "почти collapsed"...
Ну, а я обнаружил решение Нужны ещё теги <listrows>.
Вот в этот
... <listbox id="theList2"> <listitem label="Ruby"/> <listitem label="Emerald"/> <listitem label="Sapphire"/> <listitem label="Diamond"/> </listbox> ...
их и добавляем:
... <listbox id="theList2"><listrows> <listitem label="Ruby"/> <listitem label="Emerald"/> <listitem label="Sapphire"/> <listitem label="Diamond"/></listrows> </listbox> ...
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
Добавление <listrows> решает проблему визуализации, но в результате получается что-то похожее на listbox, но не listbox. Все-таки мешали узлы #text. Вылечилось добавлением оператора
XML.prettyPrinting = false;
Ниже работающий вариант, кому интересно.
<?xml version="1.0"?> <?xml-stylesheet href="chrome://global/skin" type="text/css"?> <window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" style="overflow: auto;" align="left" valign="top" > <script type="text/javascript; e4x=1"> <![CDATA[ function testParser() { //XML.ignoreWhitespace = true; XML.prettyPrinting = false; var b1 = document.getElementById('b1'); var b2 = document.getElementById('b2'); var fragment1 = <box xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> <button label="fragment1"/> </box>; b1.appendChild((new DOMParser()).parseFromString(fragment1.toXMLString(), 'text/xml').documentElement); var fragment2 = <box xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> <listbox rows="3"> <listcols> <listcol style="width: 10em;"/> <listcol style="width: 10em;"/> <listcol style="width: 10em;"/> </listcols> <listhead> <listheader label="aaa"/> <listheader label="bbb"/> <listheader label="ccc"/> </listhead> <listitem value="1"> <listcell label="aaa1"/> <listcell label="bbb1"/> <listcell label="ccc1"/> </listitem> <listitem value="2"> <listcell label="aaa2"/> <listcell label="bbb2"/> <listcell label="ccc2"/> </listitem> <listitem value="3"> <listcell label="aaa3"/> <listcell label="bbb3"/> <listcell label="ccc3"/> </listitem> <listitem value="4"> <listcell label="aaa4"/> <listcell label="bbb4"/> <listcell label="ccc4"/> </listitem> </listbox> </box>; b2.appendChild((new DOMParser()).parseFromString(fragment2.toXMLString(), 'text/xml').documentElement); } ]]> </script> <hbox> </hbox> <box> <button label="testParser" oncommand="testParser();"/> </box> <hbox> <box id="b1"/> <box id="b2"/> </hbox> </window>
:::: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8) Gecko/20051107 Firefox/1.5
Отсутствует
Добавление <listrows> решает проблему визуализации, но в результате получается что-то похожее на listbox, но не listbox...
olegs2, можно подробней ?
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
Здравствуйте, Anton.
Пример <listbox> я, не долго думая, взял из elemref. Чисто для пробы. Вставил его "как есть" и, его же, через скрипт. Через скрипт, как я уже говорил, на экране появилась некая белиберда. Затем, по вашему совету, добавил <listrows>. Перед этим посмотрел в elemref, убедился, что не слепой (его там нет), посмотрел DOM, убедился, что он есть. И вот он, родной listbox, на экране. Правда на мышку и курсор не реагирует, в отличие от своего "близнеца".
Соорудил более развернутую конструкцию (последний пример) + <listrows>. Пробовал в различных комбинациях, которые приводили либо к ошибкам, либо вышибали Firefox. Попробовал сплошную строку тегов (еще раз спасибо за совет) - работает. Поиски средств подавления #text привели к XML.prettyPrinting = false;.
Voilà!
З.Ы.
Вам лично могу послать материалы по e4x, которые я собрал, если интересно.
Отсутствует
...могу послать материалы по e4x, которые я собрал, если интересно.
Не откажусь. Спасибо.
antonglv на gmail.com ?
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
Страницы: 1