js可以延迟路由匹配/手动触发调度吗?

时间:2013-09-22 12:59:05

标签: canjs canjs-routing

我有一个这样的控件设置:

  1. 呈现加载异步的视图。
  2. 视图的数据也是异步加载的。
  3. 收听路线变化。其中一个路径处理程序显示一个模态,其中包含在步骤2中加载的模型的详细信息。
  4. 问题是用户可能会到达一个指向模型的路径的页面,这个页面在控件初始化时是不可用的,显然,模态没有被加载。

    can.Control({
        init: function() {
           can.view('file.ejs', {pages: app.Model.Page.findAll()}, function(frag){
              // inject the fragment into DOM
           });
        },
        'page/:id/comments route': function() {
           // find the page in the list of models loaded, than display the modal
        }
    });
    

    如何在渲染视图后再次触发distcher或让控制器遍历路径?

1 个答案:

答案 0 :(得分:0)

如果你存储了延迟的findAll返回的地方,你可以在你的路线中使用它来告诉它何时被加载。

http://canjs.com/docs/can.when.html

这是一个将页面存储在Control上的this.pages中的示例:
(看起来不是很好但很容易理解)

can.Control({
    init: function() {
        this.pages = app.Model.Page.findAll()
        can.view('file.ejs', {pages: pages}, function(frag){
            // inject the fragment into DOM
        });
    },
    'page/:id/comments route': function() {
        can.when(this.pages).then(function(pages){
            // find the page in the list of models loaded, than display the modal
        })
    }
});