2009-06-23 12 views
6

के बाद एक यूयूआई डाटाग्रिड पर डेटा स्रोत को कैसे बदलें I याहू DataTable का उपयोग कर रहा हूं जिसके लिए एपीआई here है।सृजन

एक बार जब मैंने ग्रिड प्रस्तुत किया है तो मुझे डेटा बदलने में कठिनाई हो रही है। मैं AJAX के माध्यम से डेटा प्राप्त करने के लिए jQuery का उपयोग कर रहा हूं, या क्लाइंट साइड डेटा द्वीप से और इसे वापस ग्रिड में रखना होगा।

DataTable API में कोई सेटडेटा स्रोत विधि नहीं है, और 'dataSource.liveData' को ग्रिड अपडेट नहीं किया गया है।

// does not work 
dataTable.dataSource.liveData = [ {name:"cat"}, {name:"dog"}, {name:"mouse"}; 

उदाहरण मैं पर मेरे कोड आधारित हूँ basic LocalDataSource example है।

मैं तालिका को पूरी तरह से पुनर्निर्मित किए बिना डेटा स्रोत को कैसे अपडेट कर सकता हूं। मैं यूयूआई डेटा स्रोतों का उपयोग नहीं करना चाहता जो असिंक कॉल करते हैं। मुझे यह जानने की ज़रूरत है कि मैं इसे 'मैन्युअल' कैसे कर सकता हूं।

+0

सिमॉन, इस पर जांच कर रहा है। क्या यह काम किया? –

+0

@किथ मेरे मालिक हमेशा मुझ पर प्राथमिकताओं को बदल रहा है। मैं अभी तक कोशिश नहीं किया था। आपको –

उत्तर

5

आप सही रास्ते पर थे, आप डाटाबेस को डाटाबेस को डेटा भेजने के लिए बताना भूल गए थे। मान लें कि आप एक LocalDataSource उपयोग कर रहे हैं और क्या डेटा स्रोत में है के साथ तालिका में डेटा बदलना चाहते हैं, livedata प्रतिस्थापित करने के बाद आप सिर्फ

dataTable.getDataSource().sendRequest(null, 
    {success: dataTable.onDataReturnInitializeTable}, 
    dataTable); 

इसके अलावा अन्य onDataReturnXXX API संदर्भ में DataTable के तरीकों क्यों दिखाई देता है। आप प्रतिस्थापन आदि के बजाय नया डेटा जोड़ सकते हैं।

+0

धन्यवाद। यह काम करता है, लेकिन अगर मेरे पास अंकन सेट है तो अद्यतन के बाद पृष्ठांकन खंड गायब हो जाता है। क्या आपने लोगों को उपरोक्त कोड स्निपेट को एक डेटाटेबल पर चलाने का प्रयास किया है जिसमें अंकन है? फिर से धन्यवाद! – Abe

0

मैं तालिका को पूरी तरह से पुनर्निर्मित किए बिना डेटा स्रोत को कैसे अपडेट कर सकता हूं?

क्या आपका मतलब "नया" कथन का उपयोग किए बिना है? यदि ऐसा है, तो मुझे यह खुद नहीं करना है, लेकिन मैं अक्सर यूयूआई का उपयोग करता हूं। मैंने देखा है कि एक डिलीवरी पंक्ति विधि है जिसका उपयोग आप सभी पंक्तियों को हटाने के लिए कर सकते हैं, तालिका की लंबाई के माध्यम से 0, और उसके बाद addRows का उपयोग करें जो इस मामले में आपके और एक इंडेक्स, 0 जैसे शाब्दिक सरणी लेता है।

क्या आपने यह कोशिश की है?

संपादित करें:this example पर एक नज़र डालें। आप जो करना चाहते हैं वह निश्चित रूप से किया जा सकता है। तालिका को अंतराल विधि (आश्चर्यजनक रूप से नहीं) का उपयोग कर सेट अंतराल पर स्थानीय रूप से अपडेट किया जा रहा है। अंतराल के सेट पर एक नज़र डालने पर, आप देख सकते हैं कि यह डेटा स्रोत के उदाहरण पर मेकनेक्शन को कॉल करता है। विधि लगता है कि यह रिमोट कॉल कर रहा है, लेकिन यह जरूरी नहीं है।

चलो उदाहरण से दो पंक्तियों पर नज़र डालें। (या मांग आप की जरूरत के रूप में पर) के बजाय एक अंतराल पर की

// Set up polling 
    var myCallback = { 
     success: myDataTable.onDataReturnInitializeTable, 
     failure: function() { 
      YAHOO.log("Polling failure", "error"); 
     }, 
     scope: myDataTable 
    } 
    myDataSource.setInterval(5000, null, myCallback) 

अंतिम पंक्ति एक बार कहा जा सकता है इस तरह यह लिख कर:

myDataSource.makeConnection(null, myCallBack) 

जो onDataReturnInitializeTable प्रणाली को बुलाती है - मैं आप अनुमान लगा जो सीधे कॉल कर सकता है जो अधिक समझ में आता है।

वैसे भी, बस उदाहरण के साथ पालन करें और उन हिस्सों को बाहर निकालें जिनकी आपको आवश्यकता नहीं है। आखिरकार ऐसा लगता है कि DataReturnInitializeTable कुंजी है।

आशा है कि मदद करता है।

+0

हाँ बताएगा कि मेरा मतलब है 'नया YAHOO.datatable()' .. से बचने के लिए मैंने मैन्युअल रूप से पंक्तियों को जोड़ने और हटाने का प्रयास नहीं किया था। मैंने सोचा कि वास्तव में पूरी तालिका को अपडेट करने का एक तरीका होना चाहिए। जब यूयूआई AJAX कॉल लौटाता है तो यह संभवतः सभी पंक्तियों को हटा नहीं सकता है और उन्हें फिर से जोड़ सकता है। वह पागल हो जाएगा। –

+0

@किथ जो बहुत ही आशाजनक दिखता है। इसे जांच लेंगे। और हाँ निश्चित रूप से इसे तुरंत चलाने में सक्षम होना चाहिए और टाइमर –

+0

से यह आपके लिए काम नहीं करता है? –

3

मैं सिर्फ यह जोड़ना चाहता था कि अगर आप तर्क संपत्ति में getState() को कॉल में पास करते हैं तो आप पेजिनेशन को सुरक्षित रख सकते हैं।

dataTable.getDataSource().sendRequest(null, 
    { 
     success: dataTable.onDataReturnInitializeTable, 
     argument: dataTable.getState()  
    } 
); 
+1

जो बहुत अच्छा काम करता है! मैं सोच रहा था कि ऐसा कैसे करें। –

0

वास्तव में, सब मैं यह काम करने के लिए किया था कोड की निम्न दो पंक्तियों है (और मेरा ajax तो एक छोटे से ओपी की तुलना में अलग से लौटाए गए) ...

dataTable.dataSource.liveData = eval(o.responseText); 
dataTable.load({}); 

क्योंकि यदि आप पढ़ते हैं कि datatable.load() क्या हर कोई कॉल करने का सुझाव दे रहा है।

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