【问题标题】:How to reload correctly a route in Ember JS如何在 Ember JS 中正确重新加载路由
【发布时间】:2013-02-20 11:53:29
【问题描述】:

我正在使用最新版本的 Ember JS (RC1),但我遇到了架构问题:

我有一个非常简单的用例:用户列表和添加用户的表单。 我的路由器:

App.Router.map(function () {   
   this.resource('users', function () {
      this.route('new');
   });
});

我的路线:

App.UsersRoute = Em.Route.extend({
    model:function () {
        return App.User.findAll();
    }
});

我的控制器:

App.UsersNewController = Em.ObjectController.extend({
    saveUser:function () {
        //'content' contains the user
        App.User.save(this.content);    

        // here i want to reload the list of users, but it doesn't work
        // The application goes correctly to the url /users
        // But doesn't call the 'model' function
        this.transitionToRoute('users');
    }
});

正如我在上面的评论中所说,当我创建一个新用户时,我想重定向到用户列表(该部分有效)并通过调用路由的“模型”方法重新加载用户列表(那部分没有)。

我可以在 UsersController 中编写一个方法来重新加载列表,但是我会在 UsersRoute 和 UsersController 之间产生重复。

有人可以帮我解决这个问题吗?

谢谢

附: :这里有一个小提琴http://jsfiddle.net/vsxXj/

【问题讨论】:

    标签: javascript ember.js


    【解决方案1】:

    模型钩子上的 Ember 文档:

    "你可以实现一个钩子来将 URL 转换为模型 路线。”

    所以我认为这个钩子不适合这种情况。我认为您应该在这种情况下使用 setupController 挂钩。试试这个:

    App.UsersRoute = Em.Route.extend({
        setupController(controller){
            controller.set("content", App.User.findAll());
        }
    });
    

    【讨论】:

    • 我已经尝试过这个解决方案,但问题仍然存在:transitionToRoute 正确更改了 URL 和视图,但没有调用 setupController,也没有更新模型
    • 你可以为它制作一个小提琴吗?
    • 您的问题与您发布的代码无关。看看这里:jsfiddle.net/mavilein/vsxXj/1
    • 您实际上并没有在控制器的 saveUser 函数中创建用户。
    • 创建用户不是重点;我想找到在转换到另一个视图时从服务器重新加载数据的最佳实践。在我的示例中,在“保存”之后不会记录“findAll”。我无法使用您的解决方案,因为我的服务器向用户添加了许多信息(id、创建日期等),我更愿意重新加载所有数据。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-24
    • 2019-01-18
    • 1970-01-01
    • 2017-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多