EmberJS覆盖没有全局的路由过滤器

时间:2014-06-26 20:12:40

标签: ember.js ember-data

我有一个可以单独使用或使用过滤方法覆盖的ListRoute。

目前,覆盖路由访问全局变量。我试图摆脱全局,但没有看到将上下文传递给函数的方法。

如何在没有全局变量的情况下传递上下文(在这种情况下是' currentUser')。或者我该如何重写呢。

为什么'这个'在扩展功能窗口?我希望我能够至少调用this.modelFor()来访问必要的信息。

Encompass.WorkspacesListRoute = Ember.Route.extend({

  controllerName: 'workspaces.list',
  templateName:   'workspaces/list',
  filter: function(workspace) {
    return true; //return everything by default, extenders will override this
  },

  model: function() {
    var store = this.get('store');
    return store.filter('workspace', this.get('filter'));
  },

});

Encompass.WorkspacesMineRoute = Encompass.WorkspacesListRoute.extend({

  filter: function(workspace) {
    //at this point 'this' is the window (why not the route?)
    return (Encompass.get('currentUser') === workspace.get('owner'));
  }

});

2 个答案:

答案 0 :(得分:0)

从纯粹的javascript角度来看,这有助于我更好地理解范围和上下文问题: http://ryanmorr.com/understanding-scope-and-context-in-javascript/

调用this.get('filter')。bind(this)似乎有效。

return store.filter('workspace', this.filter.bind(this));

.call(this)放弃了论点。

答案 1 :(得分:0)

我认为调用getter会在功能范围方面将其排除在范围之外。您应该只需传入this.filter即可。

http://emberjs.jsbin.com/lunitoyi/1/edit