我需要将 JSON 传递给 jquery-fullcalendar,虽然我可以传递 use url 作为从中获取 JSON 的源,但我更愿意将已经加载到 ember-data 存储中的数据转换为 JSON 并将其传递给 fullcalendar,所以任何更改在日历或 ember 上制作的内容将始终保持同步。
当我使用 ember 对象作为模型并在内存中创建数据时,它的工作方式如下所示:here。但是,当我通过 ember-data rest-adapter 加载数据并尝试使用相同的代码将其转换为 JSON 时,它会失败。
这是失败的 JSfiddle。
当使用 ember 对象创建数据时,我可以通过手动创建 json 来使其工作,如下所示并粘贴如下:
当我使用 Ember 对象作为模型时,它会生成一个被 fullcalendar 接受的有效 JSON。但是,如果我将其更改为使用 ember-data 模型,即App.Event = DS.Model.extend并相应地更改属性以使用DS.attr,而控制器保持不变,它将无法生成被接受的有效 json全日历。
App.Event = Em.Object.extend( {
title: null,
start: null,
allDay: null,
asJSON: function() {
return {
title: this.get('title'),
start: this.get('start'),
allDay: this.get('allDay')
};
}.property('title', 'start', 'allDay')
});
使用 ember 对象时有效但在使用 ember-data 时无效的控制器
App.EventsController = Ember.ArrayController.extend({
content: [
App.Event.create({
title: 'event1',
start: '2013-06-06'
})
],
contentAsJSON: function() {
return this.get('content').map(function(event) {
return event.get('asJSON');
});
}.property('content.[]')
});
这就是我将生成的 JSON 从上述模型和控制器传递到 jquery-fullcalendar 的方式。这里的 json 被 fullcalendar 识别,并且日历上显示的事件。你可以在这里看到它。
App.CalendarView = Em.View.extend({
templateName: 'calendar',
didInsertElement: function() {
this._super();
var controller = this.get('controller');
var calendarJSON = controller.eventJSON();
console.log(calendarJSON);
this.$().fullCalendar({
header: {
left: 'prev,next today',
center: 'title',
right: 'month,agendaWeek,agendaDay'
} ,
editable: true,
events: calendarJSON
});
}
});
如果我将 ember-object 转换为 ember-data 的 DS 模型,我该如何生成 json。到目前为止,仅将 ember 对象换成 ember-data 是行不通的。
更新
根据@Gevious 的回答工作jsfiddle。
通过@Gevious 调整了工作代码,因此它将只显示一个日历而不是多个:jsfiddle
最终工作答案
我将 jquery fullcalendar 的 didInsertElement 和初始化从控制器移回视图,一切仍然按我想要的方式工作。
使用 Ember-data 作为数据存储:http://jsfiddle.net/C4SD7/5/和http://jsfiddle.net/C4SD7/3/。使用 Ember-Model 作为数据存储: http: //jsfiddle.net/C4SD7/6/ 除了 fullcalendar,这里是使用带有 emberjs 的 datepicker的链接:http : //jsfiddle.net/jsjyw/3/。将 Momentjs 与日历一起使用:http: //jsfiddle.net/M8XLF/7/并更改全日历的颜色:http: //jsfiddle.net/A56LN/43/。使用 ember-model 作为数据存储的事件侧载约会:http: //jsfiddle.net/duHfN/15/。使用 ember-data 作为数据存储的相同代码:http: //jsfiddle.net/duHfN/14/
非常感谢。