我有一个应用程序,它根据路径显示结果列表(特别是带有Emberjs插件的查询参数)。这些结果来自服务器的响应,需要对模型进行find()调用。我正在尝试使用Ember.select视图的下拉列表来构建查询参数以过滤结果,但我似乎找不到这样做的方法,因为:
我不确定如何(或者我是否可以)从控制器创建事件。目前,我有一个自创建的控制器(使用createWithMixins)从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视图进行子类化,并在valueDidChange上发送一个事件。这确实到达了路径,但是控制器中的值尚未更新(我将使用陈旧数据进行过滤)。
最后,我尝试扩展由路由实例化的控制器;我没有成功(观察者事件似乎没有激发,我不知道如何调试)。
这样做有好办法吗?我觉得我只是朝着错误的方向前进,经过永远的搜索,我还没有发现任何类似的东西仍然是最新的(发布非全局的App.Router)。
答案 0 :(得分:1)
我不确定如何(或者我是否可以)从控制器创建事件。目前,我有一个自己创建的控制器(使用createWithMixins)......
好的,这就是问题所在。以这种方式创建控制器永远不是一个好主意,而是应该由ember创建和管理控制器。当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}}
帮助器在SlotsFiltrersController的上下文中呈现SlotsFiltersView。
{{render slotsFilters}}