मैं एक्सयूएल में एक सूची में आइटम्स को संपादित/जोड़/हटाने का एक आसान तरीका जानने का प्रयास कर रहा हूं। मेरा प्रारंभिक विचार यह है कि इन सभी को संभालने के लिए एक अलग फाइल हो, लेकिन मुझे यकीन नहीं है कि मुख्य एक्सयूएल को दूसरी फाइल के साथ कैसे प्रभावित किया जाए। अब तक मेरी सूची इस तरह दिखती है:

<?xml version = "1.0"?>
<!DOCTYPE window>

<window title = "Hello"
xmlns:html="http://www.w3.org/1999/xhtml"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" >

<script>
</script>
<listbox id = "mainList" flex = "1">
    <listhead>
    <listheader label = "Album Name"/>
    <listheader label = "Artist"/>

    <listheader label = "Year"/>
    <listheader label = "Sales"/>
    <listheader label = "Rating"/>
    <listheader label = "Genre"/>
    <listheader label = "Edit" />
    <listheader label = "Delete"/>

</listhead>

<listitem id = "1">
    <listcell label = "OK Computer"/>
    <listcell label = "Radiohead"/>
    <listcell label = "1997"/>
    <listcell label = "Platinum"/>
    <listcell label = "5/5"/>
    <listcell label = "Alternative Rock"/>  
    <button label = "Edit" oncommand= "editItem()"/>
    <button label = "Delete" oncommand = "deleteItem()"/>   
</listitem>

<listitem>
    <listcell label = "The Moon and Antarctica"/>
    <listcell label = "Modest Mouse"/>
    <listcell label = "2000"/>
    <listcell label = "Gold"/>
    <listcell label = "4.5/5"/>
    <listcell label = "Alternative Rock"/>
    <button label = "Edit"/>
    <button label = "Delete"/>
</listitem>
<listitem>
    <listcell label = "Pinkerton"/>
    <listcell label = "Weezer"/>
    <listcell label = "1996"/>
    <listcell label = "Gold"/>
    <listcell label = "5/5"/>
    <listcell label = "Alternative Rock"/>
    <button label = "Edit"/>
    <button label = "Delete"/>

</listitem>
<listitem>
    <listcell label = "Helplessness Blues"/>
    <listcell label = "Fleet Foxes"/>
    <listcell label = "2011"/>
    <listcell label = "Gold"/>
    <listcell label = "4/5"/>
    <listcell label = "Folk Pop"/>
    <button label = "Edit"/>
    <button label = "Delete"/>
</listitem>
</listbox>
</window>

बहुत आसान है लेकिन मैं उलझन में हूं कि बटन को वास्तव में काम करने के लिए मुझे किस जावास्क्रिप्ट की आवश्यकता है। आदर्श रूप से मैं एक ऐड बटन रखना चाहता हूं जो प्रत्येक कॉलम के लिए रिक्त फ़ील्ड के साथ एक नई विंडो खोलेगा, और फिर सूची में नई पंक्ति जोड़ देगा। इसे पूरा करने का सबसे अच्छा तरीका क्या होगा?

0
Aeonstrife 22 सितंबर 2011, 10:21
का क्लोजिंग टैग गायब है।
 – 
linguini
22 सितंबर 2011, 11:08
हाय लिस्टबॉक्स गुण बहुत सीमित हैं और आपके मामले में बटन के बिना प्रत्येक सेल को संपादित करने के लिए सेल्टाइप = "सेल" जो लिस्टबॉक्स में काम नहीं करता है लेकिन ट्रीएक्सयूएल में काम करता है) यह एक आकर्षण की तरह काम करता है। एक पंक्ति को हटाने के लिए आपके पास हटाने के लिए एक बटन फ़ंक्शन के साथ चेक-बॉक्स वाला एक कॉलम होना चाहिए। मैं इसे एक्सयूएल पेड़ करने का सुझाव दूंगा। वहां कुछ भी संभव है क्योंकि पेड़ में कई गुण होते हैं।
 – 
linguini
22 सितंबर 2011, 17:24

1 उत्तर

सबसे बढ़िया उत्तर

आप नियमित DOM मैनिपुलेशन फ़ंक्शंस का उपयोग करते हैं। वस्तुओं को गतिशील रूप से जोड़ते समय यह आसान होता है यदि आपके पास कहीं "टेम्पलेट" है जिसे आप क्लोन और संशोधित कर सकते हैं, उदाहरण:

<listitem id="template" hidden="true">
    <listcell class="album"/>
    <listcell class="title"/>
    <listcell class="year"/>
    <listcell class="group"/>
    <listcell class="rating"/>
    <listcell class="category"/>  
    <button label="Edit" oncommand="editItem()"/>
    <button label="Delete" oncommand="deleteItem()"/>   
</listitem>

फिर आप इस तरह एक नया आइटम जोड़ सकते हैं:

var item = document.getElementById("template").cloneNode(true);
item.removeAttribute("id");
item.removeAttribute("hidden");
item.getElementsByClassName("album")[0].setAttribute("label", albumName);
item.getElementsByClassName("title")[0].setAttribute("label", songName);
...
document.getElementById("mainList").appendChild(item);

किसी मौजूदा आइटम का टेक्स्ट बदलना समान है। आपको कहीं से नया टेक्स्ट प्राप्त करना होगा - संपादन के लिए टेक्स्ट फ़ील्ड जोड़ना आपकी ज़िम्मेदारी है हालांकि, सूची में कोई अंतर्निहित संपादन क्षमता नहीं है।

वस्तुओं को हटाना स्पष्ट रूप से सरल है:

var item = document.getElementById("item1");
item.parentNode.removeChild(item);
1
Wladimir Palant 22 सितंबर 2011, 11:54
अरे फिर से, मैंने चीजों को आसान बनाने के लिए सूची बॉक्स के बजाय पेड़ का उपयोग करने के लिए अपनी संरचना को बदलने का फैसला किया। क्या अवधारणा मूल रूप से नई वस्तुओं को जोड़ने/निकालने के लिए समान है? इसके अलावा, मैं एक पूरी तरह से अलग विंडो में जोड़ने की योजना बना रहा हूं। क्या आप एक अलग XUL फ़ाइल से किसी आइटम की आईडी प्राप्त करने में सक्षम हैं?
 – 
Aeonstrife
25 सितंबर 2011, 00:21