繁体   English   中英

Ember.js:使用没有路由的ArrayController吗?

[英]Ember.js: Using an ArrayController without a route?

我有一个要显示在页面上的类别列表。 我已经花了几个小时寻找正确的方法,但是我一直在寻找冲突的信息和方法,这些信息和方法要么不再与当前版本的Ember一起使用,要么已弃用。

要创建应用程序和Ember-Data事物:

var App = Ember.Application.create();
App.ApplicationAdapter = DS.FixtureAdapter;

App.Store = DS.Store.extend({
  adapter: 'DS.FixtureAdapter'
});

我正在将Ember-Data与一些灯具数据用于类别:

App.Category.FIXTURES = [{
  id:          1,
  name:        'Category 1',
  description: 'The first category'
}, {
  id:          2,
  name:        'Category 2',
  description: 'The second category'
}];

然后,我创建一个模型来表示类别的实例(“版本”与版本实例具有类别实例的其他模型相关):

App.Category = DS.Model.extend({
  versions:    DS.hasMany('version'),
  name:        DS.attr('string'),
  description: DS.attr('string')
});

然后,我做了一个ArrayController,但是在填充内容时遇到了麻烦。

App.CatagoriesController = Ember.ArrayController.create({
  content: [],
  init: function () {
    this.set('content', ???);
  }
});

由于它不可导航,因此未连接到路由,因此无法在路由中使用“ model”属性。

更换??? 在ArrayController中,我尝试了几件事:

我尝试了this.store.find('category')如路线示例所示,但是出现错误“ Uncaught TypeError:无法读取null的属性'find'”。

我尝试了App.Store.find('category') ,这给了我错误“未捕获的TypeError:未定义不是函数”。

任何帮助或朝着正确方向的推动都将受到赞赏。 我感觉自己甚至没有朝着正确的方向前进。

有几件事。

首先,请记住,控制器是单例的。 因此,您的init函数在应用程序的整个生命周期中只会触发一次(这可能不是您想要的)。 但这并不重要,因为...

处理模型的方式不是Ember.js的设置方式。 您不应该仅在路由中获取控制器中的模型。 这就是为什么控制器上没有store属性的原因。 您需要在路线上实现model挂钩,如下所示:

App.CategoriesRoute = Ember.Route.extend({
    model: function() {
        return this.store.find('category');
    }
});

从那里,Ember将自动在控制器上将您从model挂钩返回的数据设置为model属性( 不是 content属性,不要使用该属性)。

因此,只需从控制器中删除content属性和init函数,并在模型中实现该钩子,就可以了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM