我最近开始在ASP.NET Web API中使用Ember.js。我很难从服务器加载模型。但现在我拥有它,我想从视图中的商店获取模型。 目前我正在开发一个日历应用程序。这是逻辑,
App.IndexRoute = Ember.Route.extend({
//setupController: function (controller) {
// // Set the IndexController's `title`
// this.controllerFor('application').set('model', App.application.options);
//}
model: function () {
return this.store.findAll('eventList');
},
setupController: function (controller, model) {
this.controllerFor('index');
// controller.set('model', App.Events.findAll());
}
});
控制器:
App.IndexController = Ember.ArrayController.extend({
sortProperties: ['eventId'],
sortAscending: false,
//events: Ember.computed.alias('model')
});
模型
App.EventList = DS.Model.extend({
eventId: DS.attr('string'),
title: DS.attr('string'),
start: DS.attr('string'),
end: DS.attr('string'),
allDay: DS.attr('string')
});
App.EventListSerializer = DS.WebAPISerializer.extend({
primaryKey: 'eventId',
});
最后是视图
/// <reference path="../../@JSense.js" />
App.IndexView = Ember.View.extend({
didInsertElement: function () {
var events= this.get('controller').get('store');
//the view has been completely inserted into the dom
// $('#calendar').fullCalendar(this.get('controller.model'));
$('#calendar').fullCalendar({
events: events
});
现在我坚持在视图中获取模型。因为一旦didInsertElement
被解雇,我想用我从商店收到的模型初始化日历插件。
var events= this.get('controller').get('store');
无效。
但它确实让我这样:
var events= this.get('controller').get('store');
如您所见,我的模型已经存在。那我怎么把它拿出来看? 我真的被卡住了,这就是为什么我最后问这个问题。请帮忙...... :)
答案 0 :(得分:9)
Ember有一个默认setupController
,controller.model
已设置,所以如果你覆盖它,你需要这样做:
setupController: function (controller, model) {
// setup the model
controller.set('model', model);
// setup other things
}
此外,当您使用this.get('controller.model')
获取模型时,将返回一个类似于object的数组,称为DS.RecordArray
,并且该数组具有DS.Model
的实例,那些模型不是简单的javascript对象,所以如果你的$('#calendar').fullCalendar({ events: events });
期望一个普通的js对象,你需要在记录数组的每个项目中使用model.toJSON()
。
这是更新的代码:
App.IndexRoute = Ember.Route.extend({
model: function () {
return this.store.findAll('eventList');
},
setupController: function (controller, model) {
controller.set('model', model);
}
});
App.IndexView = Ember.View.extend({
didInsertElement: function () {
var events = this.get('controller.model').map(function(record) {
return record.toJSON({ includeId: true });
});
$('#calendar').fullCalendar({
events: events
});
}
});
我希望它有所帮助