मेरे Grails एप्लिकेशन में मेरे पास काफी बड़े मानदंड बंद हैं, और मैं अपने आवेदन में कई स्थानों पर इसका हिस्सा पुन: उपयोग करना चाहता हूं। अनुभाग को डुप्लिकेट करने के बजाय मुझे पुन: उपयोग करने की आवश्यकता है, मैं इसे एक अलग बंद करने के रूप में परिभाषित करना चाहता हूं और इसकी आवश्यकता होने पर इसे संदर्भित करना चाहता हूं, लेकिन मैं वाक्यविन्यास के साथ थोड़ा सा संघर्ष कर रहा हूं।Grails मानदंड बंद करने का हिस्सा पुन: उपयोग करना
यह एक सरल/संस्करण में कटौती है, लेकिन अनिवार्य रूप से मेरी मापदंड इस तरह दिखता है:
def criteriaClosure = {
and {
// filtering criteria that I'd like to reuse in lots of places
or {
names.each { name ->
sqlRestriction(getFilteringSql(name), [someId])
}
}
if (isOrganisationChild(childDefaultGrailsDomainClass)) {
sqlRestriction(getFilteringSql(domain), [someArg])
}
// filtering criteria that's specific to this particular method
sqlRestriction(getSomeOtherSql(), [someOtherArg])
}
}
def criteria = domain.createCriteria()
def paginatedList = criteria.list([offset: offset, max: max], criteriaClosure)
मैं बंद मैं एक चर के रूप में पुन: उपयोग करना चाहते हैं के हिस्से को परिभाषित करने की कोशिश की है, और यह संदर्भित मेरे मानदंड बंद होने पर, हालांकि इसे परिभाषित प्रतिबंध लागू नहीं होते हैं।
def reusableClosure = {
and {
or {
names.each { name ->
sqlRestriction(getFilteringSql(name), [someId])
}
}
if (isOrganisationChild(childDefaultGrailsDomainClass)) {
sqlRestriction(getFilteringSql(domain), [someArg])
}
}
}
def criteriaClosure = {
and {
reusableClosure() //this doesn't seem to work
sqlRestriction(getSomeOtherSql(), [someOtherArg])
}
}
मुझे यकीन है कि यह करने के लिए यह एक बहुत सी सरल बात होनी चाहिए, इसलिए क्षमा करें यदि यह एक कठिन सवाल है। कोई विचार?
यही काम किया, धन्यवाद। - आकस्मिक रूप से, 'reusableClosure' के बाद कोष्ठक क्यों आवश्यक हैं? – rcgeorge23
कूल :-) क्योंकि यह बंद करने को कॉल करता है (जो 'और' ब्लॉक को मानदंड में लौटाता है) –
काम करता है, बहुत बहुत धन्यवाद! – Aston