1

给定一个具有许多引用其他域类的字段的域类,最好的做法是访问控制器中的字段、将它们添加到模型中,还是直接在视图中访问这些字段?

换句话说,小型模型是否比简单视图更好,反之亦然?

例如:

// Controller
render(view: 'index', model: [b: a.b, c:a.b.c])

// View
${a}, ${c}, ${c.id}

比。

// Controller
render(view: 'index', model: [a: a])

// View
${a.b}, ${a.b.c}, ${a.b.c.id}

此外,这些替代方案在 Grails / GORM 中是否具有性能影响?

4

1 回答 1

1

我会说这完全取决于您的使用组织,但通常我会尽量减少每次渲染调用的模型中的条目数。

如果您有一部分页面需要显示 a、ab 和 abc 的一部分,那么将它们作为对“a”的单个引用传递似乎没问题。

如果您正在显示的页面有不同的部分,一个部分指的是 a,另一个是 ab,另一个是 abc,那么我建议您查找模板(http://www.slideshare.net/laelfrog/grails -layouts-sitemesh),并将“a”传递到顶部,并将“ab”从该顶级页面传递到使用ab作为“b”的部分模板中,等等。

所以如果你的控制器有:

render( view: 'index', model: [a:a] )

index.gsp 可能看起来像:

<g:render template="toplevel" model="[a: a]" />
<g:render template="midlevel" model="[b: a.b]" />
<g:render template="bottomlevel" model="[c: a.b.c]" />

然后,在模板_toplevel 中,可以使用“a”(实际上,对于这个级别,传递模型是多余的,因为当前模型与控制器发送的模型相同)。

但是在 _midlevel 中,您可以将“ab”作为“b”访问,而在 _bottomlevel 中,您可以将 abc 作为“c”访问。每个模板都应该知道它需要什么,并且应该为这些东西真正拥有自己的名称,而不是依赖于 2 中的模型渲染链。

就优化而言,我怀疑这是一个问题,除非你一遍又一遍地重新做很多工作来构建你的模型。只是取消引用孩子并不是真正的问题。

于 2013-09-01T22:16:10.507 回答