Ember.js:使用没有路由的ArrayController
Ember.js: Using an ArrayController without a route?
我有一个要在页面上显示的类别列表。几个小时以来,我一直在寻找正确的方法,但我一直发现有冲突的信息和方法,这些信息和方法要么不再适用于当前版本的Ember,要么被弃用。
创建应用程序和Ember数据:
var App = Ember.Application.create();
App.ApplicationAdapter = DS.FixtureAdapter;
App.Store = DS.Store.extend({
adapter: 'DS.FixtureAdapter'
});
我正在使用Ember数据和一些类别的固定装置数据:
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', ???);
}
});
它没有连接到路线,因为它不可导航,所以我不能在路线中使用"模型"属性。
更换ArrayController中的???
,我尝试了几种方法:
我尝试了this.store.find('category')
,就像路由的示例一样,但我得到了错误"Uncaught TypeError:无法读取null的属性'find'"。
我尝试了App.Store.find('category')
,结果出现了错误"Uncaught TypeError:undefined不是函数"。
任何帮助或向正确方向推动都将不胜感激。我有一种感觉,我甚至没有朝着正确的方向前进。
有几件事。
首先,请记住控制器是单体。因此,在应用程序的整个生命周期中,init
函数只会触发一次(这可能不是您想要的)。但这并不重要,因为。。。
处理模型的方式与Ember.js的设置方式不同。您不应该在控制器中获取模型,而应该只获取路由。这就是控制器上没有store
属性的原因。您需要在路由上实现model
挂钩,如下所示:
App.CategoriesRoute = Ember.Route.extend({
model: function() {
return this.store.find('category');
}
});
从那里,Ember将自动将控制器上的model
属性(而不是content
属性,不要使用它)设置为从model
挂钩返回的数据。
因此,只需从控制器中删除content
属性和init
函数,并在模型中实现该挂钩,就可以开始了。
- Emberjs应用程序加载在除Index之外的所有路由上
- 正在使用$location.path(.)路由ng视图
- 在AngularJS应用程序中使用封装指令和路由的推荐方式是什么
- 未激发路由的控制器属性上的观察者
- AngularJS ui路由器html5模式中断路由
- 发送json对象或使用express路由呈现视图
- 使用主干网和rails的静态页面路由
- 如何使用Passport保护路由终结点
- 有没有办法用routerLink/router.navigation附加查询/路由参数
- Nodejs和express路由,如何处理客户端的承诺
- TinyMCE实例在切换角度路由选项时会消失
- 什么'在Express中路由时,应用程序级中间件和路由器级中间件之间的区别是什么
- 使用Ampersand.js路由模块化应用程序
- Angular 2路由已弃用:如何检测CanActivate
- 格式化获取请求的路由
- 在node-js路由中发出http请求
- 无法运行php代码,有角度路由问题
- 更改路由后,运行一次js脚本
- 如何使用服务器上的react路由器处理所有可能的路由
- 基于路由的CSS样式-Angular2