我有一个可以单独使用或使用过滤方法覆盖的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'));
}
});
答案 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
即可。