2012-12-15 8 views
5

क्या डेटासोर्स.changed ईवेंट काम कर रहा है?केंडो यूआई डेटा स्रोत बदल गया घटना: क्या यह काम कर रहा है?

के बाद मेरी केंडो यूआई ग्रिड instantiated है, मैं यहाँ प्रलेखन प्रति परिवर्तन घटना बाध्यकारी हूँ:

// initialize 
$("#grid").kendoGrid({ 
     dataSource: dataSource, 

     blah blah blah 
) 

}); 
// end of initialization 



// bind afterwards 
var grid = $('#grid').data('kendoGrid'); 
    grid.dataSource.bind("change", function (e) { 
     dataChanged(); 
    }); 


//also tried a setTimeout: 

    // bind afterwards 
    setTimeout(function() { 
    var grid = $('#grid').data('kendoGrid'); 
    grid.dataSource.bind("change", function (e) { 
     dataChanged(); 
    }); 
}, 350); 



function dataChanged() { 
    // handle "change" whatever that means -- documentation definition is hazy 
    // does reassigning the data array constitute a change? 
    // does changing the value of a particular item in the data array 
    // constitute a change? 
    // does removing an item from the data array constitute a change? 

    var grid = $("#grid").data("kendoGrid"); 
    grid.refresh(); 
} 

लेकिन मेरे dataChanged:

http://docs.kendoui.com/api/framework/datasource#change

//To set after initialization 
dataSource.bind("change", function(e) { 
    // handle event 
}); 

मैं यह कर रहा हूं() फ़ंक्शन को तब नहीं कहा जाता जब मैं इनमें से किसी एक चीज करता हूं:

var grid = $('#grid').data('kendoGrid'); 
grid.dataSource.data()[1]["deptname"] = 'XXX'; 

या

grid.dataSource.data = aDifferentArray; 

मुझे यकीन है कि वास्तव में क्या 'बदला' घटना के लिए सुन रहा है नहीं कर रहा हूँ। क्या, ठीक है, इसे ट्रिगर करना चाहिए?

यदि मैं एक पूरी तरह से नया डेटा स्रोत बनाता हूं, और इसे ग्रिड को असाइन करता हूं जिसमें पहले से ही डेटा स्रोत है, तो मुझे नहीं लगता कि यह मौजूदा डेटा स्रोत के बदले हुए ईवेंट को कैसे ट्रिगर करेगा। इस तरह की एक घटना (ग्रिड यह ध्यान दे रही है कि इसका डेटा स्रोत एक अलग से बदल दिया गया है) एक ग्रिड-स्तरीय घटना होगी, डेटा स्रोत-स्तर की घटना नहीं, है ना?

उत्तर

8

ध्यान देने योग्य महत्वपूर्ण बात यह है कि DataSource का समर्थन करने वाला डेटा ObservableArray है, और उस सरणी में डेटा आइटम ObservableObject एस में परिवर्तित हो गए हैं।

डेटा स्रोत का change घटना 2 परिस्थितियों में निकाल दिया जाता है:

  1. डेटा ObservableArray परिवर्तन (एक रिकॉर्ड डाला जाता है, हटाया गया)। इसका एक उदाहरण DataSource.add() या DataSource.remove() फ़ंक्शंस का उपयोग करेगा।

  2. यदि किसी संपत्ति ने सरणी में ObservableData ऑब्जेक्ट्स में से किसी एक से डेटासोर्स तक ईवेंट बुलबुले को बदल दिया है। हालांकि, बाकी केंडो एमवीवीएम ढांचे की तरह, अधिसूचना कि एक संपत्ति बदल जाती है जब उसके .set("propertyName", value) फ़ंक्शन को कॉल किया जाता है।

यही कारण है कि grid.dataSource.data()[1]["deptname"] = 'XXX'; परिवर्तन घटना को ट्रिगर नहीं कर रहा है। यदि आप इसे बदलते हैं: grid.dataSource.data()[1].set("deptname", 'XXX'); तो यह काम करना शुरू कर देना चाहिए। मूल रूप से, change ईवेंट के बारे में सोचें, जैसा कि data अवलोकन योग्य वस्तु से निकाला गया एमवीवीएम संपत्ति परिवर्तन के जवाब में निकाल दिया गया है।

डेटा सरणी grid.dataSource.data = aDifferentArray; बदलने के लिए मुझे वास्तव में यह सुनिश्चित नहीं है कि क्या बदलाव आएगा या ट्रिगर करना चाहिए। मैंने कभी कोशिश नहीं की है।

+0

स्पष्टीकरण के लिए धन्यवाद। '.set' विधि परिवर्तन ईवेंट को ट्रिगर करती है जबकि' grid.dataSource.data = aDifferentArray', जहां तक ​​मैं कह सकता हूं। मुझे आशा है कि केंडो ग्रिड में WinForms ग्रिड में DataSource_Changed ईवेंट के बराबर होगा - जब ग्रिड को एक अलग डेटासोर्स असाइन किया जाता है, क्योंकि मैं हर 60 सेकंड में नए डेटा के साथ ग्रिड को रीफ्रेश करने की उम्मीद कर रहा हूं: http://stackoverflow.com/ प्रश्न/13892021/केंडो-यूई-ग्रिड-रीफ्रेशिंग-ग्रिड-डेटा-हर -60-सेकंड-साथ-नए-डेटा-डेटासॉर-ए/13892541 # टिप्पणी 1 9 40263_13892541 – Tim

+2

दरअसल, डेटा को स्वैप करने के लिए, मुझे लगता है कि आप ' .data() 'फ़ंक्शन: http: //docs.kendoui।कॉम/एपीआई/फ्रेमवर्क/डेटासोर्स # डेटा इसलिए आपका कोड 'grid.dataSource.data (aDifferentArray) होगा;' – CodingWithSpike

+0

उत्कृष्ट! बहुत बहुत धन्यवाद। – Tim

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