我有一个具有多条路由的路由器。当前,我在方法本身中转义了将每个参数分别传递给该方法。
出于安全目的,我需要转义URL中传递的所有参数。
class MyRouter extends Backbone.Router
routes:
"student/:id/:name" : "student"
"teacher/:tid/:tname" : "teacher"
"teacher/:tid/:tname/share" : "teacher_share"
student: (id, name) ->
id = _.escape(id)
name = _.escape(name)
#do stuff
teacher: (tid, tname) ->
tid = _.escape(tid)
tname = _.escape(tname)
#do stuff
teacher_share: (tid, tname) ->
tid = _.escape(tid)
tname = _.escape(tname)
#do stuff
是否可以一次转义所有路由中的所有参数,这样我就不必在每个方法中都明确地转义它们?
答案 0 :(得分:0)
您可以覆盖execute
execute
router.execute(callback, args, name)
每当路由匹配并且其对应的回调将要执行时,在路由器内部都会调用此方法。从execute返回false以取消当前转换。对其进行重写以执行路由的自定义解析或换行,例如,在将查询字符串交给路由回调之前先对其进行解析,如下所示:var Router = Backbone.Router.extend({ execute: function(callback, args, name) { if (!loggedIn) { goToLogin(); return false; } args.push(parseQueryString(args.pop())); if (callback) callback.apply(this, args); } });