您的位置:首页 > 其它

使用Memory Analyzer tool(MAT)分析内存泄漏(二)

2014-08-08 11:34 531 查看
helper主要是帮助视图尽可能将代码从视图中隔离出来, 并提高视图之间代码的可重用性. 基于此, rails为我们做了一些"连接"工作:

每一个controller都对应一个helper module,例如对应UserController的是UserHelper, rails内部做了一些连接工作,使得默认每个controller下的所有视图都可以访问相应helper 的方法.

rails内置一个全局helper:ApplicationHelper, rails内部做了一些连接工作,使得默认“所有controller”下的视图都可以访问ApplicationHelper下 的方法.

上面两条有时容易让人产生迷惑:

对于上面的第一条, 是不是每个controller本身也可以默认访问相应helper 的方法? 答案是不可以. 因为上面提到的helper是针对“视图”(而不是controller)提高代码隔离和重用的帮手, 所以默认只有视图才能访问到相应的helper的方法. 但是如果你有充分的理由要在controller中访问helper的方法, 你可以自己做:
ruby 代码

 

class UserController < ApplicationController  

   include UserHelper  

end  

同理, 对于上面的第二条, 是不是所有controller也可以默认访问ApplicationHelper 的所有方法?答案同样是不可以,原因同上.如果一定要这么做,因为所有的controller都继承ApplicationController, 所以可以这样:
ruby 代码

 

class ApplicationController < ActionController::Base  

  include ApplicationHelper  

end  

有时我们可能想将某个controller的helper下的一些方法共享给其他controller,比如想将UserHelper下的一些方法共享给PhotoController下的所有视图, 其中一种方案是将UserHelper下的方法放到ApplicationHelper中, 这样所有的controller下的视图都能访问到这些方法.另外两种方案如下:

PhotoController include UserHelper:
ruby 代码

class PhotoController < ApplicationController  

   include UserHelper  

end  

使用helper方法
ruby 代码

 

class PhotoController < ApplicationController  

  helper :user  

end  

这里容易使人产生迷惑的是这两种方法有什么不同:第一中方案会使PhotoController 和 其下的所有视图都能访问UserHelper的方法;而第二种方案仅会使PhotoController的所有视图能访问UserHelper的方法, 而PhotoController本身则不能。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: