Ember.js路由基于Ember.Select更改

时间:2013-07-20 23:50:01

标签: ember.js

我有一个应用程序,它根据路径显示结果列表(特别是带有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)。

1 个答案:

答案 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}}