javascript - कैसे एक नेस्टेड ऑब्जेक्ट renders एक Ext ग्रिड कॉलम को दूर करने के लिए?



extjs grid (1)

ठीक है, मैंने सेचा मंच से पूछा और एक जवाब मिला। ऐसा प्रतीत होता है कि आप कॉलम कॉन्फ़िग में getSortParam() को ओवरराइड कर सकते हैं उदाहरण:

columns: [
    ...
    {
        header: 'Manufacturer',
        dataIndex: 'manufacturer',
        sortable: true,
        renderer: function(manufacturer) {
            return manufacturer.name; // render manufacturer name
        },
        getSortParam: function() {
            return 'manufacturer.name';
        },
    }
    ...
]

यह मेरे जेपी में वर्णित आदर्श JSON को भेज देगा। अब मुझे बस अपने सर्वर को यह ठीक से पार्स करने की आवश्यकता है! :)

यहाँ सरल सवाल है, और मैं वास्तव में आश्चर्यचकित हूं कि मुझे इसका उत्तर कहीं भी नहीं मिल सकता है

मेरे पास निम्न उत्पाद मॉडल है:

Ext.define('Product', {
    extend: 'Ext.data.Model',
    fields: [
        {name: 'id', type: 'int'},
        {name: 'name', type: 'string'},
        {name: 'manufacturer', type: 'auto'}, // i.e. nested object literal
    ],
});

जैसा कि देखा जा सकता है, किसी उत्पाद के अंदर नेस्टेड ऑब्जेक्ट है जिसमें एक निर्माता (आईडी, नाम, वर्णन, आदि) के बारे में जानकारी शामिल है।

मैं एक्स्टेंड्रिड। पैनल में उत्पादों को प्रदर्शित करता हूं, जैसे:

Ext.create('Ext.grid.Panel', {
    title: 'Products',
    ...
    remoteSort: true,
    columns: [
        {text: 'Id', dataIndex: 'id', sortable: true},
        {text: 'Name',  dataIndex: 'name', sortable: true},
        {text: 'Manufacturer', dataIndex: 'manufacturer', sortable: true, renderer: function(manufacturer) {
                return manufacturer.name; // render manufacturer name
            }
        },
    ],
});

जैसा कि आप देख सकते हैं, सभी तीन स्तंभों को क्रमबद्ध करने के लिए कॉन्फ़िगर किया गया है, और मैं दूरस्थ सॉर्टिंग का उपयोग कर रहा हूं। यह पहले दो कॉलम के लिए काम करता है, लेकिन तीसरा कॉलम (निर्माता) मुझे परेशानी दे रहा है।

उदाहरण के लिए, जब कोई उपयोगकर्ता उत्पाद नाम से ग्रिड को सेट करता है, तो एक्सटेंशन सर्वर पर निम्न JSON भेजता है:

{ sort: [{ property: 'name', direction: 'ASC' }] }

यह ठीक है, क्योंकि सर्वर केवल प्रत्येक उत्पाद के name संपत्ति के अनुसार क्रमबद्ध जानता है

लेकिन जब कोई उपयोगकर्ता निर्माता द्वारा ग्रिड को सेट करता है, तो भेजा गया JSON है:

{ sort: [{ property: 'manufacturer', direction: 'ASC' }] }

चूंकि निर्माता एक ऑब्जेक्ट है, इसलिए यह सर्वर को कोई भी विचार नहीं देता है, जो निर्माता की संपत्ति को सॉर्ट करना चाहिए! क्या यह निर्माता की आईडी है? या यह निर्माता का नाम है? या कुछ और?

मेरी ग्रिड के लिए, क्योंकि मैं निर्माता के नाम को प्रस्तुत करता हूं, मैं इसे नाम से सॉर्ट करना चाहता हूं। लेकिन मुझे सर्वर को यह बताने का कोई तरीका नहीं है। और मैं निश्चित रूप से अपने सर्वर को हर समय निर्माता के नाम से बस क्रमबद्ध नहीं बनाना चाहता हूं।

अगर JSON को इस तरह भेजा गया तो यह आदर्श होगा:

{ sort: [{ property: 'manufacturer.name', direction: 'ASC' }] }

दुर्भाग्य से, Ext ऐसा नहीं लगता है (?) तो, समाधान क्या है?





extjs4