2011-12-26 69 views
3

例如:逃离Grails的渲染XML构建命名冲突

def list = { 
    books = Book.findAll(...) 
    render(contentType: 'text/xml') { 
     books(count: books.size()) { 
      for(book in books) { 
       book(id: book.id) { 
        title(book.title) 
       } 
      } 
     } 
    } 
} 

使用booksbook为节点会导致命名冲突。我知道我可以重新命名一切,以防止问题,但有没有办法逃生节点来防止问题并保持一个干净的命名约定?

回答

3

报价冲突节点生成术语:

'books'(count: books.size()) { 

,或者使用不同的本地变量名。

+1

我下的引用仅用于保留字的印象。非常感谢。 – jamesallman 2011-12-26 22:09:22

4

休伯特·克莱恩Ikkink已贴有一个替代的解决方案博客条目:

Groovy Goodness: Solve Naming Conflicts with Builders

他建议前面加上delegate到节点名称,这样例子将成为:

def list = { 
    books = Book.findAll(...) 
    render(contentType: 'text/xml') { 
     delegate.books(count: books.size()) { 
      for(book in books) { 
       delegate.book(id: book.id) { 
        title(book.title) 
       } 
      } 
     } 
    } 
} 
+0

很好的解决方案,非常感谢! – Vladimir 2014-07-21 10:30:38