【问题标题】:Rendering and re-rendering routes, hooks and Ember渲染和重新渲染路由、钩子和 Ember
【发布时间】:2015-01-15 22:04:27
【问题描述】:

好的。我有一个简单的问题,关于 ember 如何处理路线的重新渲染...

应用程序

东西

-------------------------------
Ember      : 1.8.1
Ember Data : 1.0.0-beta.12
Handlebars : 1.3.0
jQuery     : 1.11.2
-------------------------------

技术代码

router.js

this.resource('categories', {path: '/categories'}, function(){
    this.resource('category', {path:'/:cid'});
});

我有两个非常简单的嵌套模板。一个名为categories,一个名为category。它们的工作方式与您预期的一样。 但是我的 ember 应用程序中没有定义视图,只有模板。

问题

当从父路由到子路由仅通过link-to helpers 时,如何更改父路由控制器的简单属性,例如 foo: 0 从 0 到 1 (即不通过地址栏重新加载路线)?

解决方案需要在从父母到孩子时起作用,反之亦然,所有这些都来自 link-to 助手,只是为了清楚起见。从父路由到子路由时,我已经使这种行为起作用,反之亦然。

我要做的就是将父路由的这个属性从0切换到1

更新

我想通过在两条路线之间来回导航来将foo 变量从1 切换到0。想象一下,在这两条路由之间单击 link-to 10 次,每次都会看到父路由的属性更新为新值。 为什么这不是控制器中的简单钩子?我缺少什么?

徒劳的尝试部分

我进行了大量的谷歌搜索,并在路由(beforeModel、model、setupController)和控制器中尝试了许多不同的钩子。我没有成功。如果有的话,欢迎一种简单的方法来解决这个问题。如果我在这里遗漏了什么,我深表歉意。

【问题讨论】:

    标签: ember.js ember-data


    【解决方案1】:

    分类索引路线

    afterModel: function(model, transition){
        if(Ember.isEqual(this.controllerFor('application').currentRouteName, "categories.index"))
        {
           this.controllerFor('categories.index').set('foo', 0);
        }
    }
    

    分类路线

    afterModel: function(model, transition){
        if(Ember.isEqual(this.controllerFor('application').currentRouteName, "category"))
        {
            this.controllerFor('categories.index').set('foo', 1);
        }
    }
    

    在每个页面上都在this.controllerFor('application').currentRouteName 上进行调试,以确保我拥有正确的路线名称,但这应该可以解决问题

    【讨论】:

    • 感谢您的帮助,但 categories 路由和 category 路由似乎只在资源的初始加载时被评估一次。初始加载后,setupController 挂钩似乎没有得到评估。
    • 是的,所以也许可以将上面的代码移到 afterModel 钩子中,因为它每次都会被触发
    • 我将代码更新为使用 afterModel,如果可行,请告诉我
    • 这几乎可以工作了。每次我从父级转换到子级时,子路由 afterModel 钩子都会触发。但是,当我从子级转换(真正重新渲染)到父级(即另一个方向)时,父级的 afterModel 钩子没有触发。很近。我只需要一个从子 back 移动到父路由时将调用的钩子。这么近!
    • 其实我知道这个问题,你需要做一个 categories.index 路由以及一个 categories 路由,当你转换回时,只应该触发 categories.index 路由,你有这两个路由吗类别和类别.index 现在?
    猜你喜欢
    • 2020-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-02
    • 2020-09-15
    • 2022-01-02
    相关资源
    最近更新 更多