流星和完整日历包:我无法将事件添加到日历



正如我在上一个线程中所解释的,我正在学习Meteor教程并学习制作日历应用程序。

编辑:纠正了一些错误,另外我为集合制作了一个名为calevents.js的单独文件,该文件位于集合文件夹中。

我可以添加事件,但弹出窗口不会显示,所以我不能给它们一个新名称。由于这种情况没有发生,新的活动也不会出现。为了查看事件,我必须手动刷新。编辑时:我可以重命名事件,但单击"保存"时不会更改。

这是我到目前为止的代码:

演示.js:

    Session.setDefault('editingCalEvent', null);
Session.setDefault('showEditEvent', false);
Session.setDefault('lastMod', null);
Router.map(function () {
      this.route('home', {
        path: '/'
      });
      this.route('calendar', {
        path: '/calendar'
      });
});
Template.calendar.showEditEvent = function() {
  return Session.get('showEditEvent');
}
Template.editevent.evt = function() {
  var calEvent =  CalEvents.findOne({_id:Session.get('editingCalEvent')});
  return calEvent;
}
Template.editevent.events({
    'click .save': function() {
    console.log("update 123, ¿pasó por aquí?");
        updateCalEvent(Session.get('editingCalEvent'), $("#title").val());
    Session.set('editingCalEvent', null);
        Session.set('showEditEvent',false);
        Session.set('lastMod',new Date());
    }
})
Template.calendar.rendered = function() {
    $('#calendar').fullCalendar({
            dayClick:function(date, allDay, jsEvent, view) {
         //console.log("insertando...", date);
         CalEvents.insert({title: 'New Event', start: date, end: date});
         Session.set('lastMod',new Date());
            },
            eventClick:function(calEvent,jsEvent,view) {
                 Session.set('editingCalEvent', calEvent.id);
         Session.set('showEditEvent', true);
            },
      eventDrop:function(calEvent) {
                 CalEvents.update(calEvent.id, {$set: {start:calEvent.start,end:calEvent.end}});
                 Session.set('lastMod',new Date());
            },
            events: function(start, end, callback) {
         var events = [];
         calEvents = CalEvents.find();
         calEvents.forEach(function(evt) {
           events.push({
             id: evt._id,
             title: evt.title,
             start: evt.start,
             end: evt.end
           });
         });
         callback(events);
             },
       editable:true
         });
}
Template.calendar.lastMod = function() {
    return Session.get('lastMod');
}
var updateCalEvent = function(id, title) {
    CalEvents.update(id, {$set: {title:title}});
      return true;
}

calendar.html:

    <template name="calendar">
    {{#if showEditEvent}}
      {{ >editevent}}
    {{/if}}
  <input type="hidden" name="lastMod" value="{{lastMod}}" id="lastMod">
  <div id="calendar">
  </div>
</template>
<template name="editevent">
  <div id="example" class="modal">
    <div class="modal-header">
      <a class="close" data-dismiss="modal">x</a>
      <h3>Edit event</h3>
    </div>
    <div class="modal-body">
      <label for="title">Event:</label>
      <input type="text" name="title" id="title" value="{{evt.title}}">
    </div>
    <div class="modal-footer">
      <a href="#" class="btn btn-success save">Save</a>
      <a href="#" class="btn cancel" data-dismiss="modal">Cancel</a>
    </div>
  </div>
</template>

home.html:

<template name="home">
  <div class="hero-unit">
    <h1>Calendar app</h1>
    <p>Manage your calendar</p>
  </div>
</template>

演示.html:

<head>
  <title>Calendar app</title>
</head>
<body>
  {{>menu}}
    <div class="container-fluid">
        <div class="row-fluid"> 
            {{renderPage}}
        </div>
    </div>
</body>

我也从教程中提供的网站下载了代码,并将其上传到我的Nitrous盒子中,但它也不起作用。起初我以为这是关于Nitrous的东西,但可能是关于Meteor版本的东西,不幸的是,我知道的不够多,无法找到问题所在。

关于fullcalendar的其他帖子并没有解决我的问题,但如果你认为它们解决了,请给我指明正确的方向。我也看过这个包的API,但我一无所知。有人有什么想法吗?

非常感谢。

确保添加的事件与相应的模板相对应。

例如:

Template.calendar.events({
  'click .css-class-name': function(){
     //do something on click
     console.log("click event fired");
   },
});

这将在单击任何具有class="css类名"的HTML元素时触发事件,但仅适用于日历模板中的元素。

如果你试图在"editevent"模板中触发一个事件,那么你需要确保你做到了:

Template.editevent.events({
  'click .css-class-name': function(){
     //do something on click
     console.log("click event fired");
   },
});

希望这能有所帮助!

这里有一些事情可以让它启动并运行。首先,从未使用editevent模板。您应该在HTML中的适当位置使用{{> editevent}}标记来呈现它(我认为calendar模板将是一个适当的位置)。

此外,您现在正在Template.calendar.rendered函数中启动fullCalendar程序包。太好了。但是,您还必须捕捉点击事件以更新事件。以下是他们在教程中的做法源代码:

Template.editEvent.events({
    'click .save':function(evt,tmpl){
        updateCalEvent(Session.get('editing_calevent'),tmpl.find('.title').value);
        Session.set('editing_event',null);
        Session.set('showEditEvent',false);
        Session.set('lastMod',new Date());
    }
})

上面的代码将捕获editEvents模板中任何具有类save的元素上的所有单击事件。

您还在模板中引用evt,但这在JavaScript代码中没有定义。这是本教程中用于填充evt的相应代码。

Template.editEvent.evt = function(){
    var calEvent = CalEvents.findOne({_id:Session.get('editing_calevent')});
    return calEvent
}

祝你好运!

您已经解决了这个问题吗?如果是,请告诉我们具体原因是什么?

我的猜测是,这与编辑事件几乎没有关系。我认为这与insert命令有关。在尝试重现您的案例时,我遇到了一个错误:"插入失败:找不到方法"。所以我猜你的插入不起作用。

可能,您只在客户端代码中声明了集合。因此,如果您添加一个server.js文件并添加到其中: CalEvents = new Meteor.Collection('calevents'); 然后,您的集合也将向服务器端声明,允许服务器处理它

致问候,

此外,问题可能是您正在尝试运行Bootstrap-2编码(这就是教程中的内容!),您已经(可能)在Meteor应用程序上安装了Bootstrap-3。

在这种情况下,EditEvent模板中的模式将不起作用,因为它的编码在Bootstrap-3中已经完全更改。

通过在控制台中操纵Bootstrap来检查您在应用程序中安装了什么版本的Bootstrap,然后运行:流星列表——使用

你可以通过各种方式消除问题的根源。如果在对话框上方的模板EditEvent中放置一个简单的文本,您可以在单击事件时看到它是否显示。你知道,问题出在模态上。

尝试更改
updateCalEvent(Session.get('editingCalEvent'),$("#title").val())
收件人…
updateCalEvent(Session.get('editingCalEvent'),tmpl.find('#title').value);

相关内容

  • 没有找到相关文章

最新更新