Ember.js - 如何将视图绑定到路由器创建的控制器实例

时间:2013-04-25 23:21:48

标签: ember.js ember-router

我正在使用Ember.js的最新版本。我有一个Ember应用程序,使用flot.js显示条形图。视图绑定到单个对象控制器以动态更新图表。我在这里有一个简单的jsbin演示:http://jsbin.com/edosaf/2/edit。请注意,此演示创建cardController对象而不是扩展它。以下是相关代码:

App.cardController = Ember.ObjectController.create({
  id: 1,
  name: 'Visa',
  chartData: [ [2011, 450], [2012, 550], [2013, 320] ]
});

App.ApplicationView = Ember.View.extend({
    templateName: 'application',
    chartValuesBinding: 'App.cardController.chartData'
});

我需要更改上面的代码来扩展cardController而不是创建它,同时仍然将它绑定到视图。

我想使用基于传递到网址的card_id的不同条形图数据来扩展此演示。路由看起来像#/ card /:card_id。我对如何将我的ChartView绑定到我的Card ObjectController的不同实例感到困惑。我的想法是有一个Cards ArrayController来管理所有的信用卡对象。然后有一个Card ObjectController用于管理将绑定到ArrayController和ChartView的活动卡。

绑定: Cards ArrayController => Card ObjectController =>图表视图

我创建了另一个试图实现所需路由的jsbin和一个Cards ArrayController(app不起作用):http://jsbin.com/edosaf/4/edit

如何将视图绑定到由ember路由器创建的控制器实例?在这个例子中,你会如何建议使用路由#/ card /:card_id来构建ember应用程序以将CardController对象绑定到ChartView?

1 个答案:

答案 0 :(得分:2)

  

如何将视图绑定到由ember路由器创建的控制器实例?

通常,每个视图都有一个匹配的控制器单例。例如,在ApplicationView中,您可以通过ApplicationController属性访问单身controller

每当您需要从视图中访问其他内容时,都应该通过它的控制器来完成。然后使用needs数组连接控制器。

ApplicationController = Ember.Controller.extend({
  needs: ['card']
});

ApplicationView = Ember.View.extend({
  chartValuesBinding: 'controllers.card.chartData'      
});