12
私は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])
}
}
これはかなり簡単なことでなければならないと確信しています。だから、それは不吉な質問です。何か案は?
、おかげで働きました。 - ちなみに、なぜ「再利用可能な閉鎖」の後のかっこは必要ですか? – rcgeorge23
クール:-)これはクロージャー( 'and'ブロックを基準に戻す)を呼び出すためです。 –
作品、ありがとうございます! – Aston