Javascript 如何使用{can.route}侦听空白路由并对其作出反应?

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

我想用CanJS设置路由,以便根据我点击的url设置相应的控件。我的问题是试图找到一种表达默认路由的方法来侦听控件:“如果没有匹配的路由,那么就这样做”。有什么建议吗

这是到目前为止我的代码。似乎适用于像
/#这样的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论坛的最大粉丝。