【发布时间】:2015-02-11 14:48:55
【问题描述】:
我发现自己经常需要在客户端和服务器端重复排序、过滤和验证逻辑。我想让我的 Rails 服务器端的所有这些逻辑都复制到主干上,这样我就可以执行获取请求或客户端过滤器并获得相同的东西。排序和验证也是如此。
这可能是一个大问题,所以如果有人知道如何做这些,我将不胜感激。
这是我的意思的一个例子。这是主干过滤器
bySearchTerm: (term) ->
return @ if term == ''
filtered = @filter((item) ->
item.get("name").toLowerCase().indexOf(term.toLowerCase()) > -1 or item.get("number").toString().toLowerCase().indexOf(term.toLowerCase()) > -1
)
new Evue.Collections.Customers(filtered)
但后来我需要在服务器端复制它,以便有人可以执行 get 请求并获得相同的过滤结果。
unless params[:search_term].blank?
@customers = @customers.where("lower(name) LIKE ? or number LIKE ?", "%#{params[:search_term].downcase}%", "%#{params[:search_term].downcase}%")
end
当涉及到所有过滤器、排序和验证时,这就会失控。我的答案是切换到节点并使用骨干服务器和客户端逻辑吗?不确定,对任何事情都开放。
【问题讨论】:
-
你考虑过在服务器端执行 js 吗?我面临同样的问题,我找到了一种通过 php 节点引擎执行 js 的方法。另一种解决方案是将存储排序和验证构建为 json,并在服务器端和客户端以相同的方式解释 json 的不同参数。
标签: javascript ruby-on-rails validation sorting backbone.js