【问题标题】:Nested Routes Backbone嵌套路由主干
【发布时间】:2016-08-27 10:03:37
【问题描述】:

我正在尝试使用 Backbonejs 实现嵌套路由,如下所示:

var Router = Backbone.Router.extend({
    routes: {
         '(/)': 'root',
         '/a/:id: 'loadA,
         '/a/:id/:secondId: 'loadA'
    }
})

我面临的问题是 '/a/:id' 正在向服务器发出请求,我不想在转到 /a/:id/:secondId 时执行另一个请求,但使用相同的页面/视图/模型并仅更改子视图。

此外,我想跟踪历史记录,当回到以前的状态时,它似乎会触发“初始化”。

有什么想法吗?

【问题讨论】:

    标签: javascript backbone.js views router nested-routes


    【解决方案1】:

    你必须自己管理状态。我是这样做的

    var Router = Backbone.Router.extend({
        routes: {
             '(/)': 'root',
             '/a/:id: 'loadA,
             '/a/:id/:secondId: 'loadA'
        }
    })
    
    //root
    function() {
       loadRootOnce(function() {
           //done, loads only once
       })
    }
    
    //loadA
    function() {
       loadRootOnce(function() {
           loadAOnce(function() {
    
           });
       })
    }
    

    等等。 最佳实践也是使用 Promises 并最终将它们链接起来

    点赞$.when(bootstrap()).then(...)

    【讨论】:

    • 谢谢,但是资源是由 loadA 使用 ID 加载的,然后我应该将该资源重用于 '/a/:id/:secondId'
    • 是的,这就是我对and so on 所说的。因为您可以使用这种nested-fetch-once 模式嵌套任意数量的调用。所有这些函数都在内部保存结果,因此它们实际上只获取一次(并触发更改),并且只有那些尚未加载的函数才会加载。但每个人都会回馈您需要的结果。
    猜你喜欢
    • 2016-07-21
    • 2013-05-14
    • 1970-01-01
    • 2021-12-28
    • 2012-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-08
    相关资源
    最近更新 更多