2012-12-13 13 views
11

क्या डेटा पढ़ने से पहले और दूसरा सर्वर पढ़ने से परहेज करने से पहले प्रोग्रामिंग रूप से केंडोयूआई डेटासोर्स के सॉर्ट पैरामीटर को सेट करना संभव है? दायरा किसी निश्चित उपयोगकर्ता इंटरैक्शन पर डिफ़ॉल्ट प्रकार सेट कर रहा है। कैसे?केंडोयूआई: प्रोग्रामेटिक रूप से ग्रिड सॉर्ट सेट करना

यहां एक उदाहरण है जो मैं करने की कोशिश कर रहा हूं, क्योंकि उत्तर बिंदु पर नहीं पहुंच रहे हैं (या शायद मुझे समझ में नहीं आता कि चीजें कैसे काम करती हैं)।

मैं एक प्रारंभिक प्रकार के साथ एक केंडो डेटा स्रोत को परिभाषित:

var datasource = new kendo.data.DataSource({ 
    parameterMap: function (inputParams, operation) { 
     return JSON.stringify(inputParams) 
    }, 
    // default sort 
    sort: [ 
     {field: "field_1", dir: "asc"}, 
     {field: "field_2", dir: "asc"} 
    ] 
}); 

यह डेटा स्रोत एक केंडो ग्रिड के लिए बाध्य है:

var grid = $("element").kendoGrid({ 
    dataSource: datasource 
}); 
फिर

मैं एक बटन एक पर "पढ़ें" कहता है कि डेटा स्रोत और डेटा के पहले पृष्ठ के साथ ग्रिड भरता है:

$("#btn").bind("click", function(e) { 
    datasource.page(1); 
}); 

इस तरह, बू क्लिक करने के बाद tton, उपयोगकर्ता को "field_1" और "field_2" द्वारा क्रमबद्ध डेटा प्राप्त होता है, और ग्रिड कॉलम हेडर पर इस प्रकार दिखाता है। उपयोगकर्ता फिर कॉलम हेडर पर क्लिक करके डेटा को किसी भी तरह से पुन: व्यवस्थित कर सकता है।

मैं क्या करना चाहता हूं डिफ़ॉल्ट डेटा को रीसेट करना है, जैसा कि डेटासोर्स घोषणा में परिभाषित किया गया है, इसे फिर से कॉलम हेडर पर दिखा रहा है, और फिर एक नया डेटा स्रोत बनाये बिना।

कुछ की तरह:

$("#btn").bind("click", function(e) { 
    datasource.sort = [ 
     {field: "field_1", dir: "asc"}, 
     {field: "field_2", dir: "asc"} 
    ]; 
    datasource.page(1); 
}); 

प्रदान की बिंदु तक पहुँचने के (और अब भी मुझे समझ नहीं आता क्यों मैं एक वैध सवाल है कि इतनी तुच्छ नहीं और चाहिए हो रहा है के लिए प्रतिष्ठा अंक खोने हूँ नहीं है समाधान ढांचे द्वारा संबोधित किया जाना चाहिए)।

कृपया मुझे दिखाएं कि मैं गलत हूं (मैं प्रतिष्ठा खोने के बारे में चिंता नहीं कर रहा हूं - मैं समझना चाहता हूं कि किसी समस्या को कैसे हल किया जाए)। धन्यवाद!

+0

मुझे लगता है कि यह संभव नहीं है। –

+0

यह $ grid.dataSource.sort ( {फ़ील्ड: "ए", डीआईआर: "desc"}, {फ़ील्ड: "बी", डीआईआर: "एसीएस"}, {फ़ील्ड: "सी", डीआईआर: "एसी"}, {फ़ील्ड: "डी", डीआईआर: "desc"} ); हालांकि मुझे लगता है कि एकमात्र समस्या यह है कि सॉर्ट संकेतक सभी कॉलम पर दिखाई नहीं देते हैं, – topwik

उत्तर

2

हां। यह sort सेटिंग के माध्यम से संभव है।

+1

वास्तव में, सॉफ़्टवेयर सर्वर पर दूसरी कॉल का आह्वान नहीं करता है। डेटा को पढ़ने से पहले, डिफ़ॉल्ट प्रकार को संशोधित करने से पहले मैं सॉर्ट बदलना चाहता हूं। –

+0

आह ... क्या आपने वास्तव में इसे आजमाया था? शायद आप सॉर्ट कॉन्फ़िगरेशन विकल्प के बजाय सॉर्ट विधि का उपयोग कर रहे हैं। –

+0

मैंने दोनों की कोशिश की। क्या आप एक उदाहरण प्रदान कर सकते हैं? मैं जो जवाब देने की कोशिश कर रहा हूं उसे समझने के लिए कृपया दूसरे उत्तर में छोड़ी गई टिप्पणी का संदर्भ लें। –

1

तो क्या आप पहली बार डेटा को पढ़ने से पहले इस तरह को सेट करना चाहते हैं? बस सुनिश्चित करें कि आपके पास ऑटोबैंड है: अपने UI नियंत्रण पर झूठा, फिर डेटा स्रोत पर सॉर्ट गुण सेट करें, और फिर सॉर्ट किए गए डेटा प्राप्त करने के लिए तैयार होने पर datasource.read() को कॉल करें। http://jsfiddle.net/MechStar/c2S5d/

संक्षेप में, हालांकि, आप शुरू में शून्य पर डेटा स्रोत सेट करने के लिए तो डेटा स्रोत इंजेक्षन जब आप से आवश्यक इनपुट मिल की जरूरत है:

+0

ठीक है, लेकिन अगर मैं प्रत्येक संसाधन कॉल से पहले, डेटासोर्स घोषणा के बाहर, क्रमबद्ध सेट करना चाहता हूं, क्योंकि सॉर्ट कंडीशन चेंज या सिर्फ एडफॉल्ट वैल्यू पर रीसेट करने के लिए? ऐसा लगता है कि इसे प्राप्त करने का एकमात्र तरीका मौजूदा डेटासोर्स को नष्ट करना है, नए प्रकार के पैरामीटर के साथ एक नया बनाना। –

+0

आप यह कर सकते हैं। var myDataSource = new kendo.data.DataSource ({}); myDataSource.sort = [{फ़ील्ड: "myFieldName", dir: "asc"}, {फ़ील्ड: "myOtherField", dir: "desc"}]; फिर myDataSource.read() को कॉल करें; –

28
var kendoGrid = $("#grid").data('kendoGrid'); 
var dsSort = []; 
dsSort.push({ field: "fieldName1", dir: "asc" }); 
dsSort.push({ field: "fieldName2", dir: "desc" }); 
kendoGrid.dataSource.sort(dsSort); 
+2

मुझे लगता है कि इसे उत्तर के रूप में चिह्नित किया जाना चाहिए। –

+0

क्या वास्तविक grid.dataSource.data() सॉर्टिंग को अद्यतन करना संभव है? न सिर्फ दृश्य – agDev

2

यहाँ वास्तव में क्या आप पूछ रहे हैं के लिए एक jsfiddle है उपयोगकर्ता:

myKendoGrid.data ("kendoGrid")। setDataSource (getKendoDataSource ("शिपनाम", "आरोही"));

var getKendoDataSource = function (sidx, sord) { 
    return new kendo.data.DataSource({ 
    type: "odata", 
    transport: { 
     read: "http://demos.kendoui.com/service/Northwind.svc/Orders" 
    }, 
    pageSize: 10, 
    serverPaging: true, 
    serverSorting: true, 
    sort: { 
     field: sidx ? sidx : "", 
     dir: sord ? sord : "" 
    } 
    }); 
}; 
var myKendoGrid = $("#grid").kendoGrid({ 
    columns: [ 
    { field: "OrderID" }, 
    { field: "ShipName" }, 
    { field: "ShipCity" } 
    ], 
    dataSource: null, 
    pageable: { 
    pageSizes: [10, 20, 50, 100, 200] 
    }, 
    resizable: true, 
    scrollable: false, 
    sortable: { 
    allowUnsort: false 
    } 
}); 
$("#link").click(function() { 
    myKendoGrid.data("kendoGrid") 
    .setDataSource(getKendoDataSource("ShipName", "asc")); 
}); 
0

मुझे पता है कि आप क्या हासिल करने की कोशिश कर रहे हैं। मुझे ऐसा करना था क्योंकि हम उपयोगकर्ता सॉर्टिंग और फ़िल्टरिंग (मेरे मामले में क्लाइंट साइड) को सहेज रहे हैं और हम अन्य कारणों से ग्रिड फ़ंक्शंस getOptions/setOptions का उपयोग नहीं कर सकते हैं। आप autobind सेट यहां तक ​​कि अगर झूठे इस काम करने के लिए नहीं जा रहा है के रूप में आप उम्मीद करते हैं, अगर आप autobind के लिए परिभाषा देखें:

http://docs.telerik.com/kendo-ui/api/javascript/ui/grid#configuration-autoBind

यदि गलत पर सेट विजेट डेटा के लिए बाध्य नहीं किया जाएगा प्रारंभिकरण के दौरान स्रोत। इस मामले में डेटा बाइंडिंग तब होती है जब डेटा स्रोत की परिवर्तन घटना निकाल दी जाती है। डिफ़ॉल्ट रूप से विजेट कॉन्फ़िगरेशन में निर्दिष्ट डेटा स्रोत से जुड़ जाएगा।

आप एक dataSource.sort करते हैं(), इस परिवर्तन घटना है, तो, एक पढ़ एक डेटा स्रोत परोक्ष में किया जाता है (यही कारण है कि आप एक दूसरे सर्वर पढ़ने राशि है) सक्रिय करता है।

तो, आपको क्या करना है, आवश्यक सॉर्ट विकल्पों के साथ एक नया डेटा स्रोत बनाएं और फिर डेटासोर्स.read() को स्पष्ट रूप से कॉल करें।

उदाहरण के लिए (यदि आप अपने डिफ़ॉल्ट विकल्प का विस्तार विन्यास दोहराना नहीं कर सकते हैं):

var options = $.extend({}, dataSourceOptions); 
options.sort = [ 
     {field: "field_1", dir: "asc"}, 
     {field: "field_2", dir: "asc"} 
    ]; 
var dataSource = new kendo.data.DataSource(options); 
grid.setDataSource(dataSource); 
grid.dataSource.read(); 

आशा इस मदद करते हैं। सम्मान!

संबंधित मुद्दे