论坛首页 编程语言技术论坛

关于重用partial的一个问题

浏览 11745 次
精华帖 (0) :: 良好帖 (7) :: 新手帖 (10) :: 隐藏帖 (1)
作者 正文
   发表时间: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中,请问是否有好地解决办法?
   发表时间: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说在某些情况下在可以这么干,就是你这种情况
0 请登录后投票
   发表时间: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把逻辑封装了一下。
如果找到更好的办法,一定告诉我。
0 请登录后投票
   发表时间: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中……
0 请登录后投票
   发表时间: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,我看还是省省吧,更复杂了。

0 请登录后投票
   发表时间:2008-07-26  
我一直认为这是rails的一个drawback,想了半年了也没有解决方法,以前写在页面里,现在看看都恶心,我一直期待rails版能有啥好办法,结果大家似乎都想着rails的好了,每人讨论这个问题。
0 请登录后投票
   发表时间:2008-07-26  
刑天战士 写道
我一直认为这是rails的一个drawback,想了半年了也没有解决方法,以前写在页面里,现在看看都恶心,我一直期待rails版能有啥好办法,结果大家似乎都想着rails的好了,每人讨论这个问题。



比较有趣,首先把你的问题简单描述一下,你的很多页面中会涉及到想要的cities,比较笨的方法是每个action都去做这样的逻辑,但你这样做又很不优雅。

 
那么这个问题能否被抽象成:有很多小功能散落在各个模块中,他们和各个模块的关系不大,是相对独立的,所以你想集中处理他们,这是否就是传说中的AOP?

呵呵,不绕弯子了,直接上代码:

 

before_filter :hander #在此处可以加上所涉及到的action
  def hander
    #把恶心复杂的逻辑写在这,总之把city列表取出来,千万别告诉我取这些列表还和各个action有关联!
    比如:@cities = XXX           
  end

 页面直接用@cities吧 ,简单吧 :)

 

0 请登录后投票
   发表时间: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共用……

0 请登录后投票
   发表时间:2008-07-26  
似乎这个 Cells 就是用来解决这类问题的。
0 请登录后投票
   发表时间:2008-07-26  
看了一下,还要单独写个cell class,真麻烦……

本来应该在controller里面的东西,在单独的class中,本来应该在page里面的东西,在controller中……
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics