Ember Data管理模型在没有路径的控制器中

时间:2014-04-28 20:47:57

标签: ember.js controller ember-data models

我使用{{render "header"}}在一个sepaarate把手模板中将我的部分应用程序与主模板分开,以便在正确的位置渲染它。 这个sepparate模板也有自己的控制器来显示模型中的一些数据(App.Notification)。 我想要做的是显示有限数量的notifications和新通知的总数。 当在每个循环中调用控制器的notifications属性时,Ember数据从服务器加载10个条目,但是一旦我尝试通过splice限制显示的通知量,它就不会返回任何数据

基本上,如果我无法在路径中设置控制器模型,我在处理模型数据时遇到问题,我认为这就是为什么slice的正常语法在这种情况下不起作用的原因。 我已经搜索过Stackoverflow和Ember文档,但只找到了正常Route的示例 - >控制器设置但在这个特定主题上没有任何内容,所以问题是,如何在此设置中正确处理模型数据?

标头控制器:

App.HeaderController = Ember.Controller.extend
  notificationNew: (->
    @get('notifications').filterBy('seen', false).get('length')
  ).property('notifications')

  notifications: (->
    @store.find('notification').slice(0, 2)
  ).property('@each.notification')

模板:

{{#each notifications}}
 ...
{{/each}}

1 个答案:

答案 0 :(得分:2)

要通过命名约定在与路径无关的控制器上设置属性,请参阅以下jsbin。

http://emberjs.jsbin.com/gugajaki/3/edit

App = Ember.Application.create();

notifications = [
  {seen: false, message: "tornado siren!!"}
  {seen: true, message: "Omg lol security breach"}
  {seen: false, message: "BFF Rite?"}
  {seen: false, message: "steve kane 4 prez?"}
]

App.HeaderController = Ember.Controller.extend
  newNotifications: Ember.computed.filterBy("notifications", "seen", false)


App.ApplicationRoute = Ember.Route.extend
  setupController: (controller, model) ->
  headerController = this.controllerFor("header")

  #this can be a remote fetch via find.  will work the same
  headerController.set("notifications", notifications)

您发布的代码中有几个问题将在链接中解决,但为了清楚起见,我将在此列举:

  1. 您可以直接在模板中使用length属性
  2. 使用Ember.computed.filterBy获得非常有效的数组观察
  3. 使用应用程序路由的“controllerFor”方法
  4. 配置标头控制器的单例实例
  5. 我不明白拼接,但我不会这样做
  6. 希望这有帮助。