0

道場は初めてですので、ご容赦ください。私は現在、データベースからのイベントを使用して、道場カレンダーの作成に取り組んでいます。カレンダーはデフォルトでグリッド(月次)ビューになり、ロード時に最初の呼び出しを行って最初のイベントセットを取得します。デフォルトのビューは、現在の月のイベント+/-1週間を取得するために呼び出しを行います。これを実現するために、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オブジェクトを介して設定されるように、interval-change関数を変更してみてください。

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 に答える