user3310980 से जवाब पसंद किया जाता था जब मैंने उसे देखा था, लेकिन वहाँ registerColumnsProcessor विधि पर बहुत कम प्रलेखन है। मुझे स्तंभ परिभाषाओं के बिना इसका उपयोग करने के बारे में उनकी टिप्पणी का संदर्भ मिला, इसलिए मैं यह स्पष्ट करना चाहता था कि आप निश्चित रूप से कॉलम डीफ़ के साथ इस विधि का उपयोग कर सकते हैं। यह कुछ रोचक लचीलापन प्रदान करता है।
इस उदाहरण में, चार स्तंभ हैं जो टॉगल बटन द्वारा निर्धारित चार अन्य स्तंभों के साथ स्वैप करते हैं। $ctrl.showDetails
true
है जब बिक्री कॉलम प्रदर्शित होना चाहिए और भुगतान आइटम प्रदर्शित होने पर false
।
स्तंभ परिभाषाओं में, onRefresh
संपत्ति ग्रिड ताज़ा करने पर स्तंभ और setVisibleColumns
विधि के लिए कॉल करने के लिए एक विधि के रूप में परिभाषित किया गया registerColumnsProcessor()
लिए आपूर्ति की है। जब ग्रिड ताजा है, प्रत्येक स्तंभ के लिए, यह स्तंभ परिभाषा colDef
संपत्ति में this
स्तंभ वस्तु के लिए सेट के साथ की जाँच करें और प्रत्येक स्तंभ में उसके द्वारा निर्धारित के लिए onRefresh
विधि कॉल करेंगे।
/*--------------------------------------------*/
/* showPayments - Make payment items visible. */
/* showDetails - Make sales items visible. */
/*--------------------------------------------*/
var showPayments = function() { this.visible = !$ctrl.showDetails; };
var showDetails = function() { this.visible = $ctrl.showDetails; };
var columnDefs =
[
{ field: 'receiptDate', displayName: 'Date', width: 120, type: 'date', cellFilter: "date:'MM/dd/yyyy'", filterCellFiltered: true },
{ field: 'receiptNumber', displayName: 'Rcpt No', width: 60, type: 'number' },
{ field: 'receiptFrom', displayName: 'From', width: 185, type: 'string' },
{ field: 'paymentMethod', displayName: 'Method', width: 60, type: 'string', onRefresh: showPayments },
{ field: 'checkNumber', displayName: 'No', width: 60, type: 'string', onRefresh: showPayments },
{ field: 'checkName', displayName: 'Name', width: 185, type: 'string', onRefresh: showPayments },
{ field: 'paymentAmount', displayName: 'Amount', width: 70, type: 'string', onRefresh: showPayments },
{ field: 'description', displayName: 'Desc', width: 100, type: 'string', onRefresh: showDetails },
{ field: 'accountNumber', displayName: 'Acct No', width: 80, type: 'string', onRefresh: showDetails },
{ field: 'accountName', displayName: 'Acct Name', width: 160, type: 'string', onRefresh: showDetails },
{ field: 'salesTotal', displayName: 'Amount', width: 70, type: 'string', onRefresh: showDetails }
];
/*----------------------------------------------------*/
/* Columns processor method called on grid refresh to */
/* call onRefresh' method for each column if defined. */
/*----------------------------------------------------*/
var setVisibleColumns = function(cols)
{
for (var i=0; i < cols.length; i++)
if (cols[i].colDef.onRefresh)
cols[i].colDef.onRefresh.call(cols[i]);
return cols;
};
/*----------------------------------*/
/* Callback to set grid API in */
/* scope and add columns processor. */
/*----------------------------------*/
var onRegisterApi = function(api)
{
$ctrl.itemList.api = api;
api.core.registerColumnsProcessor(setVisibleColumns);
};
/*------------------------------*/
/* Configure receipt item grid. */
/*------------------------------*/
$ctrl.showDetails = false;
$ctrl.itemList =
{
columnDefs: columnDefs,
enableCellEdit: false,
enableColumnMenus: false,
enableFiltering: false,
enableHorizontalScrollbar: uiGridConstants.scrollbars.WHEN_NEEDED,
enableVerticalScrollbar: uiGridConstants.scrollbars.WHEN_NEEDED,
data: [],
onRegisterApi: onRegisterApi
};
जब $ctrl.showDetails
बदल गया है, एक साधारण ताज़ा कॉलम स्वैप जाएगा।
$ctrl.showDetails = !$ctrl.showDetails;
$ctrl.itemList.api.grid.refresh();
मुझे आशा है कि यह किसी के लिए सहायक होगा।
यह मेरे लिए काम नहीं करता है – fauverism
आप किस यूई-ग्रिड संस्करण का उपयोग कर रहे हैं? इस उत्तर को पोस्ट करने के बाद से शायद उन्हें बहुत सारे बदलाव हुए हैं। –
मैं संस्करण 3.0 – fauverism