Javascript 如何使用{can.route}侦听空白路由并对其作出反应?
我想用CanJS设置路由,以便根据我点击的url设置相应的控件。我的问题是试图找到一种表达默认路由的方法来侦听控件:“如果没有匹配的路由,那么就这样做”。有什么建议吗 这是到目前为止我的代码。似乎适用于像Javascript 如何使用{can.route}侦听空白路由并对其作出反应?,javascript,url-routing,canjs,canjs-routing,Javascript,Url Routing,Canjs,Canjs Routing,我想用CanJS设置路由,以便根据我点击的url设置相应的控件。我的问题是试图找到一种表达默认路由的方法来侦听控件:“如果没有匹配的路由,那么就这样做”。有什么建议吗 这是到目前为止我的代码。似乎适用于像/#这样的URL/工厂/1/天/3和/#/工厂/1,但不适用于/#或/ can.route('plant/:plant_id/day/:day', {}); can.route('plant/:plant_id', {}); can.route('', {}); var Router = ca
/#这样的URL/工厂/1/天/3
和/#/工厂/1,但不适用于/#代码>或/
can.route('plant/:plant_id/day/:day', {});
can.route('plant/:plant_id', {});
can.route('', {});
var Router = can.Control({}, {
init : function () {},
"{can.route}" : function (route, event, newVal, oldVal) {
console.log('Init default control');
},
"{can.route} plant_id" : function (route, event, newVal, oldVal) {
console.log('Init plant control');
},
"{can.route} day" : function (route, event, newVal, oldVal) {
console.log('Init day control');
}
});
另外,我实际上通过使用Can.Control.route插件做到了这一点:
"route" : function (route, event, newVal, oldVal) {
console.log('route Default route', arguments);
}
但是route插件似乎既设置了路由,又对它们做出了反应,我想知道在没有特定插件的情况下如何做到这一点。最后做了如下的事情,但感觉不太理想
"{can.route} change" : function (ev, attr, how, newVal, oldVal) {
if(newVal=== 'add' && (!ev.attr('plant_id') && !ev.attr('day')))
console.log('{can.route} Default route', arguments);
},
您的解决方案可以工作,但您也可以使用插件,它允许您在控制器操作中直接定义和侦听路由:
var Router = can.Control({
init : function(el, options) {
},
"/:plantId route" : function(data) {
// the route says /id
// data.id is the id or default value
},
route : function(data){
// the route is empty
}
});
new Router(window);
我注意到默认的“/”路由也存在同样的问题。我跳入pushstate.js,发现它在默认路由下无法正常工作。您可以在此处查看更多详细信息:
没有pushstate.js(使用#!),我没有测试过任何东西,所以这只适用于使用pushstate。是的,正如你在我文章的最后一节中所看到的,我偶然发现了这一点,但我只是想知道一种不使用其他插件的方法。尽管如此,我还是对你的回答表示赞赏:)顺便说一句,我看到你在javascript mvc论坛上很活跃;有什么线索可以解释为什么我得到答案的机会看起来好多了?从未在MVC论坛上获得任何意见。哦,我没有看到你更新帖子。无论如何,我也会尝试在论坛上回答,但这样通常比较容易。不是Zohos论坛的最大粉丝。