2017-04-04 48 views
0

我一直在努力解决这个问题几天了,基本上我试图完成的是添加一个自定义属性到我加载的每个事件数据库。 我在周围搜索了一段时间,发现了其他函数中的addAttr函数。这个函数在添加和保存一个新事件时工作得很好,但显然在我从数据库加载的事件上使用它时不起作用。我试图创建调度程序之前,并创建调度(通过使用getEvents,然后修改数据,并使用resetEvents更新它们),但没有工作或者之后添加它..AlloyUI调度程序 - 从数据库加载后添加自定义属性

function Schedule(boundingbox, events) 
{ 
    var self = this; 
    this.schedule = null; 
    this.events = events || []; 
    this.boundingbox = boundingbox || ""; 

    console.log(self.events); 

    YUI({ lang: 'nl-NL' }).use(
     'aui-scheduler', 
     function (Y) { 
      var events = self.events; 

      var dayView = new Y.SchedulerDayView({ isoTime: true }); 
      var weekView = new Y.SchedulerWeekView({ isoTime: true }); 
      var monthView = new Y.SchedulerMonthView({ isoTime: true }); 

      var eventRecorder = new Y.SchedulerEventRecorder({ 
       on: { 
        save: function (event) { 
         var instant = this; 
         $.ajax({ 
          type: "POST", 
          url: "/EventHandler", 
          data: { "content": this.getContentNode().val(), "startDate": new Date(this.get('startDate')).getTime()/1000, "endDate": new Date(this.get('endDate')).getTime()/1000 }, 
          datatype: "json", 
          success: function (output) { 
           output = JSON.parse($.trim(output)); 
           instant.addAttr("eventid", { 
            value: output.data.EV_ID, 

            setter: function(val) { 
             return output.data.EV_ID; 
            }, 

            validator: function(val) { 
             return Y.Lang.isNumber(val); 
            } 
           }); 
          } 
         }); 
        }, 
        edit: function (event) { 
         var instance = this; 
         console.log(instance.getAttrs()); // returns a list of attributes, eventid is not among them 
         console.log(instance.get("eventid")); // returns undefined 
         self.schedule.getEvents()[0].get("eventid") // returns undefined 
        }, 
        delete: function(event) { 

        } 
       } 
      }); 

      self.schedule = new Y.Scheduler({ 
       strings: { agenda: 'Agenda', day: 'Dag', month: 'Maand', today: 'Vandaag', week: 'Week', year: 'Jaar', 'description-hint': "Een nieuwe afspraak" }, 
       activeView: weekView, 
       boundingBox: self.boundingbox, 
       date: new Date(), 
       eventRecorder: eventRecorder, 
       firstDayOfWeek: 1, 
       items: self.events, 
       render: true, 
       views: [dayView, weekView, monthView] 
      }); 


      $.each(self.schedule.getEvents(), function(key, value) { 
       value.addAttr("eventid", { 
        value: 123, 

        setter: function(val) { 
         return 123; 
        }, 

        validator: function(val) { 
         return Y.Lang.isNumber(val); 
        } 
       }); 
      }); 

      console.log(self.schedule.getEvents()); // returns an array of events 
      console.log(self.schedule.getEvents()[0].get("eventid")); // returns the eventid: 123 
     } 
    ); 
} 

正如你所看到的我一直在尝试调试这些值以查看它是否有效,并且出于某种原因,当我在更新它们之后立即记录事件ID时,它将返回正确的eventid,但是当我在on-edit中执行时,它返回undefined。

有人知道我在做什么错吗?

回答

0

要定位新创建的ScheduleEvent,您需要在保存功能中存储event.newSchedulerEvent

然后你就可以:

newSchedulerEvent.set("eventid", output.data.EV_ID)