extjs4.1 - Extjs4.2.1-जेसनसन को पेर्नपेनल में विफल रहता है




(4)

आपके पास यहां जो कुछ है, वह मुझे तटस्थता में एक बग माना जाता है जब आप पाठक को ऐसे मूल का उपयोग करने के लिए बदलते हैं, जो children लिए नहीं है, तो आपको नए नाम के लिए डेटा में बच्चों के संपत्ति नाम के हर उदाहरण को भी बदलना होगा। इसका मतलब है कि यदि आप रूट को results बदलना चाहते हैं, तो आपके पेड़ के डेटा को वास्तव में ऐसा कुछ देखना होगा:

echo "
{
    'success': true, 
    'variable': 100, 
    'results': 
    [
    { 'id' : '1' , 'text' : '1', 'expanded': true, 
        'results':[
            { 'id' : '5' , 'text' : '5', 'leaf':true},
            { 'id' : '6' , 'text' : '6', 'leaf':true}
        ]
    },
    { 'id' : '2' , 'text' : '2', 'leaf':true},
    { 'id' : '3' , 'text' : '3', 'leaf':true},
    { 'id' : '4' , 'text' : '4', 'leaf':true},
    { 'id' : '7' , 'text' : '7', 'leaf':true},
    { 'id' : '8' , 'text' : '8', 'leaf':true},
    { 'id' : '9' , 'text' : '9', 'leaf':true},
    { 'id' : '10' , 'text' : '10', 'expanded': true, 
        'results':[
            { 'id' : '11' , 'text' : '11', 'leaf':true},
            { 'id' : '12' , 'text' : '12', 'leaf':true}
        ]
    }
    ]
}";

दूसरा विकल्प children लिए शीर्ष स्तर के results गुण नाम बदलने और अपने स्टोर की जड़ children रूप में चिह्नित करना है।

मैं एक पेनलपैनल और मैं बनाऊं और जैसे ही store बनाऊं

          var store = Ext.create('Ext.data.TreeStore', {
            autoload: false,
            proxy: {
                type: 'ajax',
                url: 'data.php',
                reader: {
                    type: 'json',
                    root: 'results'                 
                }
            }
          });

मेरा सर्वर प्रिंट जेसन की तरह दिखता है

{ "results": 
    [
    { id : '1' , text : '1', expanded: true, 
        children :[
            { id : '5' , text : '5', leaf:true},
            { id : '6' , text : '6', leaf:true}
        ]
    },
    { id : '2' , text : '2', leaf:true},
    { id : '3' , text : '3', leaf:true},
    { id : '4' , text : '4', leaf:true},
    { id : '7' , text : '7', leaf:true},
    { id : '8' , text : '8', leaf:true},
    { id : '9' , text : '9', leaf:true},
    { id : '10' , text : '10', expanded: true, 
        children :[
            { id : '11' , text : '11', leaf:true},
            { id : '12' , text : '12', leaf:true}
        ]
    }
    ]
}

लेकिन जब मैं अपना कोड चलाता हूं, तो मुझे फायरबग दिखाई देती है और वह हमेशा GET http://localhost/example/data.php... चला जाता है GET http://localhost/example/data.php... कभी भी बंद नहीं होता :(

और मेरे पेड़ को बहुत ज्यादा डबल जोड़ दिया गया है

उस धन्यवाद को कैसे ठीक करें

संपादित करें
असली में मैं उपनाम के साथ अपने पेपरपैनल को परिभाषित करता हूं और इसे xtype रूप में प्रयोग कर रहा xtype
लेकिन मैं नया उदाहरण बना और एक ही समस्या मिलती हूं। ये मेरा जेएस है

var store = Ext.create('Ext.data.TreeStore', {
            autoload: false,
            proxy: {
                type: 'ajax',
                url: 'data.php',
                reader: {
                    type: 'json',
                    root: 'results'                 
                }
            }
        });

        Ext.create('Ext.tree.Panel', {
            title: 'Simple Tree',
            width: 200,
            height: 150,
            store: store,
            rootVisible: false,
            renderTo: Ext.getBody()
        });

और यहाँ मेरा data.php

echo "
{
    'success': true, 
    'variable': 100, 
    'results': 
    [
    { id : '1' , text : '1', expanded: true, 
        children :[
            { id : '5' , text : '5', leaf:true},
            { id : '6' , text : '6', leaf:true}
        ]
    },
    { id : '2' , text : '2', leaf:true},
    { id : '3' , text : '3', leaf:true},
    { id : '4' , text : '4', leaf:true},
    { id : '7' , text : '7', leaf:true},
    { id : '8' , text : '8', leaf:true},
    { id : '9' , text : '9', leaf:true},
    { id : '10' , text : '10', expanded: true, 
        children :[
            { id : '11' , text : '11', leaf:true},
            { id : '12' , text : '12', leaf:true}
        ]
    }
    ]
}";

अपनी स्वत: लोड कॉन्फ़िगरेशन वर्तनी जांचें

 var store = Ext.create('Ext.data.TreeStore', {
        //    autoload: false,
            autoLoad : false,
            proxy: {
                type: 'ajax',
                url: 'data.php',
                reader: {
                    type: 'json',
                    root: 'results'                 
                }
            }
          });

क्या आप बस का पालन करने की तरह स्टोर करने के लिए रूट डेटा जोड़ सकते हैं

var store = Ext.create('Ext.data.TreeStore', {
            autoLoad : false,
            root: {
                text: 'Corporate Media',
                id: '0',
                expanded: true
            }
            proxy: {
                type: 'ajax',
                url: 'data.php',
                reader: {
                    type: 'json',
                    root: 'results'                 
                }
            }
          });

बस ऊपर दिए गए उत्कृष्ट उत्तरों में कुछ पेंस जोड़ना चाहते थे: यदि आप प्री एक्स्टजेस 4.1 पर काम कर रहे हैं, और एप्लिकेशन की विस्तृत घटनाएं नहीं हैं लेकिन उन्हें चाहिए, तो मैं एक बहुत ही सरल तकनीक का उपयोग कर रहा हूं जो मदद कर सकता है: एक बनाएं सरल वस्तु का निरीक्षण करने योग्य, और किसी भी ऐप चौड़ी घटनाओं को परिभाषित करें जिसमें आपको आवश्यकता हो सकती है। फिर आप उन घटनाओं को अपने ऐप में कहीं से भी निकाल सकते हैं, जिसमें वास्तविक एचटीएमएल डोम तत्व भी शामिल है और उस घटक से आवश्यक तत्वों को रिले करके किसी भी घटक से उन्हें सुन सकते हैं।

Ext.define('Lib.MessageBus', {
    extend: 'Ext.util.Observable',

    constructor: function() {
        this.addEvents(
            /*
             * describe the event
             */
                  "eventname"

            );
        this.callParent(arguments);
    }
});

फिर आप किसी भी अन्य घटक से कर सकते हैं:

 this.relayEvents(MesageBus, ['event1', 'event2'])

और किसी भी घटक या डोम तत्व से उन्हें आग:

 MessageBus.fireEvent('event1', somearg);

 <input type="button onclick="MessageBus.fireEvent('event2', 'somearg')">