【问题标题】:Emberjs: Resetting controller based on dynamic segmentEmberjs:基于动态段重置控制器
【发布时间】:2014-12-01 11:34:41
【问题描述】:

我的应用中有这个路由结构:

Profile.Router.map(function() {
  this.resource('profile', { path: '/:user' }, function(){
    this.route('followers');
  });
});

我的/:user/followers 页面应该显示:user 的关注者列表。 profile.followers 的控制器设置为无限滚动 - 因此它具有 curPage, resultsPerPage 之类的属性。

Profile.ProfileFollowersController = Ember.ArrayController.extend(InfiniteScroll.ControllerMixin,{
  curPage: 1,
  resultsPerPage: 20,
  //other code for infinite scroll which increments curPage as user scrolls down
})

现在,由于控制器在 emberjs 中是单例的,所以当我从 /tom/followers 移动到 /jin/followers 时,为 /tom/followers 设置的无限滚动属性将被保留并应用于 /jin/followers

例如。假设我在/tom/followers 并向下滚动4 页,'profile.followers' 控制器的curPage 属性设置为4。现在当我移动到/jin/followers 时,虽然路线的模型挂钩会返回jin 的关注者列表, 但会选择 curPage 作为 4,因为 ember 的控制器是单例的,我已经向下滚动到 /tom/followers 的第 4 页。 这个应该怎么处理?

这也是我的profile.followers 路线:

Profile.ProfileFollowersRoute = Ember.Route.extend({
  model: function(params) {
    console.log("fetching followers model");
    return Ember.$.getJSON('/'+this.modelFor('profile').user+'/followers?new=1');
  },
});

【问题讨论】:

    标签: ember.js


    【解决方案1】:

    您可以为此使用routesetupController 挂钩。每次输入路由时都会触发此钩子。

    App.ProfileFollowersRoute = Ember.Route.extend({
      setupController: function(controller, model) {
        // Call _super for default behavior
        this._super(controller, model);
        // Reset the desired controller properties
        controller.setProperties({
          curPage: null,
          someOtherProp: null
        });
      }
    });
    

    我制作了一个 jsbin 来演示它: http://emberjs.jsbin.com/fiyetefeno/6/

    您可以在此处阅读 API 文档: http://emberjs.com/api/classes/Ember.Route.html#method_setupController

    【讨论】:

    • 感谢您的努力!但这是处理这个问题的正确 ember 方式吗?如果我每次都必须重置各种属性,我不明白为什么控制器是单例的。
    • 非常像 Ember 的方式。控制器状态一直保存在内存中,直到您通过自己重新加载或重置它来刷新它。这家伙解释得更好:balinterdi.com/2014/06/26/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-08
    • 2010-12-29
    • 2015-03-02
    • 2015-08-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多