我有一个emberjs应用与集成日期选择器。 当我点击日期选择日期,计算性能应该比较点击日期与*时隙的日期**,看看是否有比赛,我希望基于该模板刷新,无论是列出可用的时隙或者说没有。 不幸的是,模板不刷新或呈现新的数据。
这是的jsfiddle ,重要的控制器/路由/模板是时隙 , 约会 , 日期选择器和datepickerComponenet。
在的jsfiddle,您需要点击查看更多和向下滚动,看到加载的日历和具有时隙中红色的日期。 问题是,点击在红色的任何日期应该重新呈现时隙模板,并重新计算,将计算displaySelectedDate财产。 现在,它只是呈现时隙模板 ,你第一次点击日期,该模板未在随后的每次点击刷新后。
这是控制器。 它也似乎在计算财产不被调用一次以上。 其结果是,以前,我叫.volatile在displaySelectedDate计算的财产 ,但并没有改变,所以我删除,并添加此处显示的观察者 ,但仍然没有改变。
App.TimeSlotController = Ember.ArrayController.extend({
needs: 'appointment',
content: [ ],
apptId: null,
apptDate: null,
day: Ember.A([ ]),
contentDidChange: function(){
a = this.get('day');
console.log(a);
return a;
}.observes('day'),
displaySelectedDate: function(){
a = moment(this.get('apptDate')).unix();
b = moment.utc(this.get('day').toString()).unix();
x = (a === b);
return x;
}.property('day.@each', 'apptDate'),
});
从我填充时隙先取出约会路线
App.TimeSlotRoute = Ember.Route.extend({
setupController: function(controller, model) {
self = this;
self._super(controller, model);
parent = self.controllerFor('appointment');
self.controller = controller;
c = parent.get('timeSlots').then(function(data){
f = self.controller.set('content', data);
});
}
})
在日期选择器控制器,提供了将在日期选择器着色日期排列。 如果我们使用的dateArray计算财产的注释去掉了版本获取预约的startDate预期日期是彩色的。 但是,如果评论的第一个版本,并取消由开始时间获取时隙 calebdar dateArray计算性能的第二个版本不着色。 任何想法,为什么会这样 。
App.DatePickerController = Ember.ArrayController.extend({
needs: ['appointments', 'appointment', 'timeSlot'],
time: Ember.computed.alias('controllers.timeSlot.content'),
appointments: Ember.computed.alias('controllers.appointments.content'),
dateArray: function(){
_this = this;
var fetchDates = _this.get('appointments');
return fetchDates.map(function(item){
return moment.utc(item.get('startDate')).format("YYYY-MM-DD");
});
}.property('appointments.@each.startDate'),
/*
dateArray: function(){
_this = this;
var fetchDates = _this.get('time');
return fetchDates.map(function(item){
return moment.utc(item.get('startTime')).format("YYYY-MM-DD");
});
}.property('timeSlot.@each.startTime'),
*/
});
这是thesame代码的缩小版,我创建了一个第二的jsfiddle 。 在这个版本的日期选择器控制和路由被删除,它有代码,被转移到了预约控制器。 如果你点击它,你会看到,与预约的时隙不是红色,它应该得到的颜色。
App.AppointmentController = Ember.ObjectController.extend({
dateArray: function(){
_this = this;
fetchDates = [ ];
var aa = _this.get('content');
var yy = aa.get('timeSlots');
yy.then(function(hh){
nn = hh.map(function(item){ return moment.utc(item.get('startTime')).format("YYYY-MM-DD");
});
pp = fetchDates.pushObjects([nn]);
return nn;
});
return fetchDates;
}.property('content.@each.timeSlots')
});
这样做控制台日志建议的dateArray在约会控制器返回形式的数组:
[Array[2]]
但阵列使用dateArray计算属性 ,颜色预约的startDate日历,是形式的第一个版本时,由datepickerController返回:
["2013-10-18", "2013-10-25", "2013-10-25", "2013-10-18"]
我想要的是
是做了非常对的DatePicker日期点击重新呈现时隙模板,其次对我来说,能够使用任何任命控制器或dateArray计算财产从日期选择器CONTROLER第二个版本加载时隙开始时间的日历。
这是任命的startDate的屏幕截图上的日历支持算法FMP第一的jsfiddle
这是截图,当我尝试时隙开始时间传递给基础上无论是2号的jsfiddle,或在第一个的jsfiddle的日期选择器控制器注释掉dateAarray财产的日历。 注意日历停留在这两种情况下无色
谢谢你的帮助。