使用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本身则不能。
每一个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本身则不能。
相关文章推荐
- 使用Memory Analyzer tool(MAT)分析内存泄漏(一)
- 使用Memory Analyzer tool(MAT)分析内存泄漏(一)
- 使用Memory Analyzer tool(MAT)分析内存泄漏
- 使用Memory Analyzer tool(MAT)分析内存泄漏(一)
- 使用Memory Analyzer tool(MAT)分析内存泄漏(二)
- 使用Memory Analyzer tool(MAT)分析内存泄漏(二)
- 使用Memory Analyzer tool(MAT)分析内存泄漏(二)
- 使用Memory Analyzer tool(MAT)分析内存泄漏(一)
- 使用Memory Analyzer tool(MAT)分析内存泄漏
- 使用Memory Analyzer tool(MAT)分析内存泄漏(一)
- 使用Memory Analyzer tool(MAT)分析内存泄漏
- 使用Memory Analyzer tool(MAT)分析内存泄漏(二)
- 使用Memory Analyzer tool(MAT)分析内存泄漏(一)
- 使用Memory Analyzer tool(MAT)分析内存泄漏(二)
- 使用Memory Analyzer tool(MAT)分析内存泄漏(二)
- 使用Memory Analyzer tool(MAT)分析内存泄漏(一)
- 使用Memory Analyzer tool(MAT)分析内存泄漏(二)
- 使用Memory Analyzer tool(MAT)分析内存泄漏(一)
- 使用Memory Analyzer tool(MAT)分析内存泄漏(三)
- 使用Memory Analyzer tool(MAT)分析内存泄漏(一)