Javascript 多条主干路由上的相同事件
我看到一些帖子提到了一个类似的问题,但不是完全相同的事情 下面是我的routes文件顶部的一个片段 我想知道我使用的方法是否可以在每条路线上调用全局事件。我使用的事件是非常标准、简单的事件,比如清除#items容器 如您所见,我正在调用构造函数中的“all”事件,然后指向routes文件中定义的几个方法 我的问题是,假设我想在几个屏幕上显示相同的全球事件;比如说,所有的“目录”屏幕。我一直在做一些奇怪的和公认的黑客把戏,以获得ouJavascript 多条主干路由上的相同事件,javascript,backbone.js,methods,routes,Javascript,Backbone.js,Methods,Routes,我看到一些帖子提到了一个类似的问题,但不是完全相同的事情 下面是我的routes文件顶部的一个片段 我想知道我使用的方法是否可以在每条路线上调用全局事件。我使用的事件是非常标准、简单的事件,比如清除#items容器 如您所见,我正在调用构造函数中的“all”事件,然后指向routes文件中定义的几个方法 我的问题是,假设我想在几个屏幕上显示相同的全球事件;比如说,所有的“目录”屏幕。我一直在做一些奇怪的和公认的黑客把戏,以获得ou @routeName = route.split(":")[1]
@routeName = route.split(":")[1]
# only substantiate the dropdown on User Catalog screen.
if @routeName is "catalogScreen" or @routeName is "catalogPDFScreen"
我相信你可以想象,这不是理想的,也不是特别干净。我只是想找到方法来干掉我的路由器文件来捕捉所有这些全球事件,这是我能想到的最好的方法
routes:
"" : "homeScreen"
"catalogs" : "catalogsScreen"
"catalogs/:id" : "catalogScreen"
"catalogs/:id/page/:page_id" : "catalogScreen"
"catalogs/:id/pdf" : "catalogPDFScreen"
"catalogs/:id/pdf/page/:page_id" : "catalogPDFScreen"
"catalogs/:id/category/:category_id" : "categoryScreen"
"departments/:id" : "departmentScreen"
"notifications" : "notificationsScreen"
"settings" : "settingsScreen"
"products/:id" : "productScreen"
"catalog/:catalog_id/search/:search_query": "searchCatalogScreen"
"search/:search_query" : "searchScreen"
"login" : "loginScreen"
"members/:member_id/catalogs/:catalog_id" : "userCatalogScreen"
"members/:member_id" : "profileScreen"
":user_name/:catalog_name" : ""
#extends router class to allow storing of routes for a history
constructor: (options) ->
@on "all", @storeRoute
@on "all", @clearAlerts
@on "all", @clearScroll
@on "all", @setSearch
@on "all", @setNav
在此提前感谢任何人的帮助!我对主干网越来越有经验,但我显然有一些东西需要学习。就路由表本身的干燥度而言,您可以利用对optional的支持来组合共享相同根但不同参数的路由:
"catalogs/:id(/page/:page_id)"
至于将常见操作附加到某些路由(但不是全部路由),有许多选项。我认为最干净的方法是将您的路由器拆分为多个路由器:CatalogRouter
用于catalogs*
URL等。这只有在路由器自然映射到您的应用程序结构时才有意义
如果不想拆分路由器,另一种方法是触发路由的自定义事件
catalogScreen:(id, pageId) =>
#normal route handling here
@trigger "routed:catalog"
以及其他地方:
@on "routed:catalog", @foo
@on "routed:catalog", @bar
@on "routed:catalog", @baz
或者,如果您的事件处理程序不需要路由参数,您可以使用下划线的compose
来进行一些语法分析
@on "routed:catalog", _.compose @foo, @bar, @baz
就路由表本身的干度而言,您可以利用对optional的支持来组合共享相同根但不同参数的路由:
"catalogs/:id(/page/:page_id)"
至于将常见操作附加到某些路由(但不是全部路由),有许多选项。我认为最干净的方法是将您的路由器拆分为多个路由器:CatalogRouter
用于catalogs*
URL等。这只有在路由器自然映射到您的应用程序结构时才有意义
如果不想拆分路由器,另一种方法是触发路由的自定义事件
catalogScreen:(id, pageId) =>
#normal route handling here
@trigger "routed:catalog"
以及其他地方:
@on "routed:catalog", @foo
@on "routed:catalog", @bar
@on "routed:catalog", @baz
或者,如果您的事件处理程序不需要路由参数,您可以使用下划线的compose
来进行一些语法分析
@on "routed:catalog", _.compose @foo, @bar, @baz
这太漂亮了!!非常感谢。非常聪明的主意,直到现在我才知道关于u.compose。很酷。这太漂亮了!!非常感谢。非常聪明的主意,直到现在我才知道关于u.compose。很酷。