锁定老帖子 主题:关于重用partial的一个问题
精华帖 (0) :: 良好帖 (7) :: 新手帖 (10) :: 隐藏帖 (1)
|
|
---|---|
作者 | 正文 |
发表时间:2008-07-26
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-07-26
刑天战士 写道 比如,有一个City表,我们需要取出某些想要的cities来,然后在partial中进行渲染。这个partial是嵌入一个大的页面的一个小部分。但是,为了在partial中能够得到城市的集合,我们要么在action中用City.find,然后用一个实例变量传递,要么直接在partial中写(非常难看)。但是,现在有多个template共用这个partial,难道我们要在每个action中都要用一个City.find?如果在java中,我记得tiles可以include一个action,非常方便,但是在rails中,在template中只能render :partial,不能render :action,这样会使大量的不相关的查询代码混合在一个action中,请问是否有好地解决办法?
憨,就写在页面中! 看看《利用*****进行敏捷开发第1版》,david说在某些情况下在可以这么干,就是你这种情况 |
|
返回顶楼 | |
发表时间:2008-07-26
right now 写道 刑天战士 写道 比如,有一个City表,我们需要取出某些想要的cities来,然后在partial中进行渲染。这个partial是嵌入一个大的页面的一个小部分。但是,为了在partial中能够得到城市的集合,我们要么在action中用City.find,然后用一个实例变量传递,要么直接在partial中写(非常难看)。但是,现在有多个template共用这个partial,难道我们要在每个action中都要用一个City.find?如果在java中,我记得tiles可以include一个action,非常方便,但是在rails中,在template中只能render :partial,不能render :action,这样会使大量的不相关的查询代码混合在一个action中,请问是否有好地解决办法?
憨,就写在页面中! 看看《利用*****进行敏捷开发第1版》,david说在某些情况下在可以这么干,就是你这种情况 那个…不能这么不负责任的说… 老刑说的这个,确实是个问题。至少我目前的理解,你只能要么render partial,把复杂的逻辑抽到helper里面去;要么发起一个ajax call来render那一块内容,但这样一来那块内容就不在整个页面的onload控制下了。 我有一个跟这个很相似的情况,老刑的是city,我的是calendar。我的办法就是做了一个partial,里面自己处理params,用helper把逻辑封装了一下。 如果找到更好的办法,一定告诉我。 |
|
返回顶楼 | |
发表时间:2008-07-26
gigix 写道 right now 写道 刑天战士 写道 比如,有一个City表,我们需要取出某些想要的cities来,然后在partial中进行渲染。这个partial是嵌入一个大的页面的一个小部分。但是,为了在partial中能够得到城市的集合,我们要么在action中用City.find,然后用一个实例变量传递,要么直接在partial中写(非常难看)。但是,现在有多个template共用这个partial,难道我们要在每个action中都要用一个City.find?如果在java中,我记得tiles可以include一个action,非常方便,但是在rails中,在template中只能render :partial,不能render :action,这样会使大量的不相关的查询代码混合在一个action中,请问是否有好地解决办法?
憨,就写在页面中! 看看《利用*****进行敏捷开发第1版》,david说在某些情况下在可以这么干,就是你这种情况 那个…不能这么不负责任的说… 老刑说的这个,确实是个问题。至少我目前的理解,你只能要么render partial,把复杂的逻辑抽到helper里面去;要么发起一个ajax call来render那一块内容,但这样一来那块内容就不在整个页面的onload控制下了。 我有一个跟这个很相似的情况,老刑的是city,我的是calendar。我的办法就是做了一个partial,里面自己处理params,用helper把逻辑封装了一下。 如果找到更好的办法,一定告诉我。 我也没啥更好的办法,ajax call的话,又是一个请求,这样的话太多了性能很成问题,不管是server还是client;有种情况是整个controller里面的大多数action都会有这个partial,这样的话,我会用before_filter来做;如果逻辑只是find的话,我会用直接写页面的方式来做;如果复杂的话,就是helper了,但是目前的问题是helper混杂了页面逻辑,业务逻辑,还有各个controller公用的部分我们也放在了helper中…… |
|
返回顶楼 | |
发表时间:2008-07-26
gigix 写道 right now 写道 刑天战士 写道 比如,有一个City表,我们需要取出某些想要的cities来,然后在partial中进行渲染。这个partial是嵌入一个大的页面的一个小部分。但是,为了在partial中能够得到城市的集合,我们要么在action中用City.find,然后用一个实例变量传递,要么直接在partial中写(非常难看)。但是,现在有多个template共用这个partial,难道我们要在每个action中都要用一个City.find?如果在java中,我记得tiles可以include一个action,非常方便,但是在rails中,在template中只能render :partial,不能render :action,这样会使大量的不相关的查询代码混合在一个action中,请问是否有好地解决办法?
憨,就写在页面中! 看看《利用*****进行敏捷开发第1版》,david说在某些情况下在可以这么干,就是你这种情况 那个…不能这么不负责任的说… 老刑说的这个,确实是个问题。至少我目前的理解,你只能要么render partial,把复杂的逻辑抽到helper里面去;要么发起一个ajax call来render那一块内容,但这样一来那块内容就不在整个页面的onload控制下了。 我有一个跟这个很相似的情况,老刑的是city,我的是calendar。我的办法就是做了一个partial,里面自己处理params,用helper把逻辑封装了一下。 如果找到更好的办法,一定告诉我。 想不到熊护法也没有好的办法。 那你的办法还不是“做了一个partial,里面自己处理params,用helper把逻辑封装了一下”,不就是写在页面中,复杂情况下用helper封装一下嘛。这个方法已经很简单了啊,我倒是很期待看看更简单的方法,重写rails? 至于ajax call,我看还是省省吧,更复杂了。 |
|
返回顶楼 | |
发表时间:2008-07-26
我一直认为这是rails的一个drawback,想了半年了也没有解决方法,以前写在页面里,现在看看都恶心,我一直期待rails版能有啥好办法,结果大家似乎都想着rails的好了,每人讨论这个问题。
|
|
返回顶楼 | |
发表时间:2008-07-26
刑天战士 写道
我一直认为这是rails的一个drawback,想了半年了也没有解决方法,以前写在页面里,现在看看都恶心,我一直期待rails版能有啥好办法,结果大家似乎都想着rails的好了,每人讨论这个问题。
呵呵,不绕弯子了,直接上代码:
before_filter :hander #在此处可以加上所涉及到的action def hander #把恶心复杂的逻辑写在这,总之把city列表取出来,千万别告诉我取这些列表还和各个action有关联! 比如:@cities = XXX end 页面直接用@cities吧 ,简单吧 :)
|
|
返回顶楼 | |
发表时间:2008-07-26
liuqiang 写道 刑天战士 写道 我一直认为这是rails的一个drawback,想了半年了也没有解决方法,以前写在页面里,现在看看都恶心,我一直期待rails版能有啥好办法,结果大家似乎都想着rails的好了,每人讨论这个问题。
比较有趣,首先把你的问题简单描述一下,你的很多页面中会涉及到想要的cities,比较笨的方法是每个action都去做这样的逻辑,但你这样做又很不优雅。 那么这个问题能否被抽象成:有很多小功能散落在各个模块中,他们和各个模块的关系不大,是相对独立的,所以你想集中处理他们,这是否就是传说中的AOP? 呵呵,不绕弯子了,直接上代码: before_filter :hander #在此处可以加上所涉及到的action def hander #把恶心复杂的逻辑写在这,总之把city列表取出来,千万别告诉我取这些列表还和各个action有关联! 比如:@cities = XXX end 页面直接用@cities吧 ,简单吧 :) 老大,仔细看我的回复,我想过这种方法了,但是这只是一个controller的很多action共用的情况,考虑一下一个controller只有两个action用到这个,也写个before_filter?或者两个controller的多个action共用…… |
|
返回顶楼 | |
发表时间:2008-07-26
似乎这个 Cells 就是用来解决这类问题的。
|
|
返回顶楼 | |
发表时间:2008-07-26
看了一下,还要单独写个cell class,真麻烦……
本来应该在controller里面的东西,在单独的class中,本来应该在page里面的东西,在controller中…… |
|
返回顶楼 | |