2014-09-24 6 views
5

की सभी पंक्तियों को देखते हुए एक SlickGrid में सभी कक्षों सत्यापित किया जा रहा है, मैं कैसे ट्रिगर कर सकते हैं सभी पंक्तियों में सभी कोशिकाओं मान्य करने की? या शायद सेल को सत्यापित करने के लिए एक बार ट्रिगर करने के लिए जावास्क्रिप्ट का उपयोग करने के लिए (जिसे मैं सभी पंक्तियों में सभी कोशिकाओं के खिलाफ उपयोग कर सकता हूं)?SlickGrid

उपयोग केस वह है जहां उपयोगकर्ता को प्रत्येक सेल को संपादित करना होगा और डिफ़ॉल्ट से कुछ और प्रदान करना होगा, और हम यह सुनिश्चित करना चाहते हैं कि उन्होंने और किया है, तो हम डिफ़ॉल्ट सत्यापन त्रुटि व्यवहार दिखाना चाहते हैं यदि वे नहीं हैं ।

वर्तमान में ऐसा लगता है कि मान्यता केवल फ़ील्ड संपादित कर रहे हैं पर होता है।

+0

आप किसी भी अन्य चौखटे है कि आप करने के लिए "काम" के इस भाग को सौंपने सकता है का उपयोग कर रहे द्वारा शैली विफलताओं के लिए इस्तेमाल किया जा सकता है? आप महसूस किया होगा, Slickgrid के डिफ़ॉल्ट मान्यता केवल एक 'editor' जो एक पैरामीटर के रूप केवल मूल्य पारित हो जाता है की' validate' समारोह तक सीमित है। वांछित व्यवहार प्राप्त करने के लिए आप स्रोत को संशोधित कर सकते हैं, लेकिन व्यक्तिगत रूप से मैं इस प्रकार के सत्यापन को किसी अन्य ढांचे (यानी [नॉकआउट सत्यापन] (https://github.com/Knockout-Contrib/Knockout-Validation) पर प्रतिनिधि दूंगा) ... हालांकि मैं इस संयोजन के आंशिक हूं क्योंकि मुझे इसका अनुभव है। – Origineil

+0

नहीं, मैं SlickGrid सत्यापन में बनाया के साथ रहना पसंद करेंगे। – jlarson

+0

मैं (http://jsfiddle.net/origineil/nLpzjL32/) पूर्ण ग्रिड सत्यापन के [एक डेमो शुरू कर दिया] है। 'मान्य' बटन प्रत्येक डेटा प्रविष्टि के विरुद्ध परिभाषित 'सत्यापनकर्ता' नामक किसी कॉलम को चलाएगा। * डिफ़ॉल्ट सत्यापन त्रुटि व्यवहार * एक संपादक इनपुट फ़ील्ड को बंद करने की अनुमति नहीं देना है, इसलिए मैंने सेल फ्लैशिंग को यह स्पष्ट करने के लिए जोड़ा है कि आपको वांछित विफलता को संभालने के लिए कहां आवश्यकता होगी। दूसरा, मुझे नहीं पता कि * डिफ़ॉल्ट * मान क्या होगा, इसलिए मैंने केवल एक संख्या के साथ उपयोग की आवश्यकता है कि वे '> 0' हों। – Origineil

उत्तर

2

मनाया के रूप में, Slickgrid के डिफ़ॉल्ट सत्यापन जो किसी भी उपलब्ध validator एक पैरामीटर के रूप केवल मूल्य के साथ पारित करने के लिए जाँच करता है एक editor की validate समारोह तक सीमित है। अतिरिक्त प्रासंगिक जानकारी प्रदान करने के लिए, एक कस्टम संपादक की आवश्यकता होती है, या अधिक विशेष रूप से कस्टम सत्यापन फ़ंक्शन। या तो एक नया मूल्य संपादक से आने वाले या किसी अन्य आवश्यक सत्यापन पहलुओं के साथ-साथ मौजूदा मूल्य

this.validate = function() { 
    if (args.column.validator) { 
     args.newValue = $input.val() 
     var validationResults = args.column.validator(args); 

     if (!validationResults.valid) { 
      return validationResults; 
     } 
    } 

    return { valid: true, msg: null }; 
}; 

प्रत्येक स्तंभ फिर एक सत्यापनकर्ता डिफ़ॉल्ट मान के भीतर जो के विरुद्ध जांच की जाएगी की आवश्यकता होगी।

var Validator = function(args) { 

    //validate the existing value or the incoming editor value 
    var value = args.newValue ? args.newValue : args.item[args.column.field] 
    var result = value > 0 
    return {valid: result} 
} 

संपूर्ण ग्रिड को सत्यापित करने के लिए एक सत्यापन विधि प्रदान करती है जो प्रत्येक पंक्ति पर एक सत्यापनकर्ता के लिए प्रत्येक कॉलम को देखती है। मान्यता परिणामों के आधार पर rowIndex -> collection of failures की एक संबंधपरक मानचित्रण बनाया गया है देशी onValidationError घटना को पास करने की। यह त्रुटियों की उपस्थिति की उपयोगकर्ता अधिसूचना को संभालने के लिए सदस्यता के लिए अनुमति देता है। इसके अलावा, मान्यता परिणाम providing specific metadata to the grid

var validateColumns = function(args){ 

var failures=[]; 

for (c in columns) { 
    var column = columns[c] 
    if (column.validator) { 
     if(!column.validator({row: args.row, item: args.item, column: column}).valid){ 
     failures.push({columnIndex: c, column: column, rowIndex: args.row, item: args.item}) 
     } 
    } 
} 
return failures; 
} 

grid.validate = function() { 
    var rowFailures = {} 
    for (r in data) { 
    //ignore our metadata provider (if applicable) 
    if(r == 'getItemMetadata'){continue;} 

    var failures = validateColumns({item: data[r], row: r}) 
    if(failures.length > 0){ 
     rowFailures[r] = failures; 
    } 
    } 

    if(Object.keys(rowFailures).length > 0){ 
    grid.onValidationError.notify({"rowFailures": rowFailures}, new Slick.EventData()) 
    } 
    } 

Fiddle

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