2013-07-20 36 views
1

我有一个应用程序,显示基于路线(特别是,与Emberjs插件查询参数)的结果列表。这些结果来自服务器的响应,并且需要对模型执行find()调用。我试图使用Ember.select视图的下拉列表来建立查询参数来过滤结果,但我似乎无法找到一种方法来做到这一点,因为:Ember.js路由基于Ember.Select变化

我不知道如何(或者我甚至可以)从控制器创建事件。

App.SlotsFiltersController = Ember.Object.createWithMixins({ 
    weekday: null, 
    kind: null, 
    neighborhood: null, 

    filtersChanged: function() { 
    // I'd like to send an event to my current route here 
    }.observes('weekday', 'kind', 'neighborhood') 
}); 

哪个正确观察从Ember.Select的变化,但不会有机会获得:目前,接收选择从Ember.select视图结合我有一个自我创造的控制器(带createWithMixins)路由器。

我也尝试了继承Ember.Select视图,并在valueDidChange上发送一个事件。这确实到达路线,但是该值尚未在控制器中更新(我将过滤陈旧的数据)。

最后,我试着扩展由路由实例化的控制器;我没有成功与此(观察员事件似乎没有火,我不知道如何调试)。

有没有很好的方法来做到这一点?我觉得我只是走错了方向,经过永久搜索后,我还没有发现任何类似的东西,仍然是最新的(后非全球App.Router)。

回答

1

我不知道如何(或者如果我什至可以)从控制器创建事件。目前,我有一个自我创建的控制器(与createWithMixins)...

好吧,这是问题。以这种方式创建控制器永远不是一个好主意,相反,控制器应该由烬创建和管理。当ember创建一个控制器时,它将注入控制器需要的属性,例如指向路由的'target'属性。从您的模板

App.SlotsFiltersController = Ember.Controller.extend({ 
    weekday: null, 
    kind: null, 
    neighborhood: null, 

    filtersChanged: function() { 
    target.send('eventName') 
    }.observes('weekday', 'kind', 'neighborhood') 
}); 

App.SlotsFiltersView = Ember.SelectView.extend({}) 

现在,使用{{render}}助手来解析SlotsFiltersView在SlotsFiltrersController的背景下:然后你就可以发送事件这样的路线。

{{render slotsFilters}} 
+0

谢谢!我之前尝试过,但我发现它没有为我工作的原因是由于我的部分呈现在错误的上下文中(例如{{controller}},部分返回了应用程序控制器,而不是我的插槽控制器 - 通过将部分移动到{{outlet}})进行修复。 – Felix