0

我对道场很陌生,所以请多多包涵。我目前正在创建一个 dojo 日历,其中的事件来自数据库。日历默认为网格(每月)视图,并在加载时进行初始调用以获取第一组事件。默认视图会调用以获取当前月份的事件 +/- 一周。我在 Observable 中使用 JsonRest 对象来完成此操作。

这目前工作没有问题。我遇到的问题是提取/更新其他月份的数据。期望的效果是让用户单击前进或后退按钮以移动到下一个月或上个月。发生这种情况时,我想查询数据库以显示要显示的新事件。我能够返回新数据并将其记录到控制台,但我无法让它显示在日历上。我确定我遗漏了一些(希望如此)简单的东西,但我无法弄清楚,或者找到任何好的文档。这是我所拥有的:

require(['dojo/parser', 
         'dojo/ready',
         'dojox/calendar/Calendar',
         'dojo/store/Observable',
         'dojo/store/JsonRest',
         'dijit/registry'],
  function(parser, ready, Calendar, Observable, JsonRest, registry) {
    ready(function(){
        var MM   = new Date().getMonth() + 1;
        if (MM < 10)
          { MM = '0' + MM};

        var YYYY = new Date().getFullYear();
        var monthStore  = new Observable(JsonRest({target: '/levelx/teamSchedule/getMonthInfo/'}));
        calendar = new Calendar({
          store: monthStore,
          dateInterval: 'month',
          style: styleText,
          editable: false,
          cssClassFunc: function(e){
            return e.calendar;
          },
          query: '?q=' + YYYY + '-' + MM
        }, 'calendar');

    calendar.on("timeIntervalChange",function(e){
      var YYYY = e.startTime.getFullYear();
      var MM   = e.startTime.getMonth() + 1;
      if (MM < 10)
        { MM = '0' + MM};
      monthStore.query('?q=' + YYYY + '-' + MM).then(function(results){
        console.log(results);
      });
    });

我觉得我很接近。就像我说的,我将正确的数据返回到控制台 (console.log(results)),但不知道如何让它在实际日历中显示。

4

2 回答 2

2

通过以下修改,我能够完成我所需要的。每当用户更改显示的日期范围时,它将自动运行查询以收集和显示正确的事件。

require(['dojo/parser',
         'dojo/ready',
         'dojox/calendar/Calendar',
         'dojo/store/JsonRest',
         'dijit/registry',
         'dojo/dom',
         'dojo/html'],
  function(parser, ready, Calendar, JsonRest, registry, dom, html) {
    ready(function(){
        var MM   = new Date().getMonth() + 1;
        if (MM < 10)
          { MM = '0' + MM};
        var YYYY = new Date().getFullYear();
        var detailStore = JsonRest({target: '/levelx/teamSchedule/getDayInfo/'});
        var monthStore  = JsonRest({target: '/levelx/teamSchedule/getMonthInfo/'});

        calendar = new Calendar({
          dateInterval: 'month',
          style: styleText,
          editable: false,
          cssClassFunc: function(e){
            return e.calendar;
          }
        }, 'calendar');

        calendar.on("timeIntervalChange",function(e){
          var YYYY = e.startTime.getFullYear();
          var MM   = e.startTime.getMonth() + 1;
          if (MM < 10)
            { MM = '0' + MM};

          calendar.set('query','?q=' + YYYY + '-' + MM);
          calendar.set('store', monthStore);
        });
    });
});
于 2012-09-27T16:35:30.133 回答
0

尝试更改间隔更改功能,以便通过日历对象设置查询,而不是直接在商店中设置。

calendar.on("timeIntervalChange",function(e){
  var YYYY = e.startTime.getFullYear();
  var MM   = e.startTime.getMonth() + 1;
  if (MM < 10)
    { MM = '0' + MM};

// this
  this.query('?q=' + YYYY + '-' + MM).then(function(results){
    console.log(results);
  });
});

还没有使用过日历,所以这是一个猜测。但看起来query在日历属性中设置了一个首字母,这应该反映在dojo.store.api. 日历本身很可能没有正确观察,然后在新数据到达时又不会呈现。

于 2012-09-25T21:29:21.590 回答