2013-12-10 61 views
1

我现在正在研究一个多星期,但我无法将我的JSON值从外部可拖动div移到Arshaw的Fullcalendar。动态创建的外部事件不可拖动

感谢一些帮助我有我的json数据加载到外部div。所有看起来都是正确的,但是通过'external-events'类将动态创建的div附加到div后,我的事件不再可以拖动。

如果我将.draggable()添加到我的新创建的div与'.external-event'类的div,它变得可拖动但我不能将它们正确地放到我的日历中。具有标题值的不可拖动的新div将显示在新的空白可拖动div下。这很烦人。

在我的index.html:

<script> 
$(document).ready(function() { 


/* initialize the external events 
-----------------------------------------------------------------*/ 

$('#external-events div.external-event').each(function() { 

    // create an Event Object  (http://arshaw.com/fullcalendar/docs/event_data/Event_Object/) 
    // it doesn't need to have a start or end 
    var eventObject = { 
     title: $.trim($(this).text()) // use the element's text as the event title 
    }; 

    // store the Event Object in the DOM element so we can get to it later 
    $(this).data('eventObject', eventObject); 

    // make the event draggable using jQuery UI 
    $(this).draggable({ 
     zIndex: 999, 
     revert: true,  // will cause the event to go back to its 
     revertDuration: 0 // original position after the drag 
    }); 

}); 


/* initialize the calendar 
-----------------------------------------------------------------*/ 

$('#calendar').fullCalendar({ 
    header: { 
     left: 'prevYear,nextYear prev,next today', 
     center: 'title', 
     right: 'month,agendaWeek,agendaDay' 
    }, 
    events: 'json/example.json', 
    eventRender: function (event, element) {element.find('.fc-event-title').html(event.id);}, 
    eventClick: function(event) { 
    if (event.url) { 
     window.open(event.url); 
     return false; 
    } 
    }, 
    editable: true, 
    droppable: true, // this allows things to be dropped onto the calendar !!! 
    drop: function(date, allDay) { // this function is called when something is dropped 

     // retrieve the dropped element's stored Event Object 
     var originalEventObject = $(this).data('eventObject'); 

     // we need to copy it, so that multiple events don't have a reference to the same object 
     var copiedEventObject = $.extend({}, originalEventObject); 

     // assign it the date that was reported 
     copiedEventObject.start = date; 
     copiedEventObject.allDay = allDay; 

     // render the event on the calendar 
     // the last `true` argument determines if the event "sticks" (http://arshaw.com/fullcalendar/docs/event_rendering/renderEvent/) 
     $('#calendar').fullCalendar('renderEvent', copiedEventObject, true); 

     // is the "remove after drop" checkbox checked? 
     if ($('#drop-remove').is(':checked')) { 
      // if so, remove the element from the "Draggable Events" list 
      $(this).remove(); 
     } 

    } 
}); 

}); 

</script> 
<style> 

    body { 
    margin-top: 40px; 
    text-align: center; 
    font-size: 14px; 
    font-family: "Lucida Grande",Helvetica,Arial,Verdana,sans-serif; 
    } 

    #wrap { 
    width: 1100px; 
    margin: 0 auto; 
    } 

    #external-events { 
    float: left; 
    width: 150px; 
    padding: 0 10px; 
    border: 1px solid #ccc; 
    background: #eee; 
    text-align: left; 
    } 

    #external-events h4 { 
    font-size: 16px; 
    margin-top: 0; 
    padding-top: 1em; 
    } 

.external-event { /* try to mimick the look of a real event */ 
    margin: 10px 0; 
    padding: 2px 4px; 
    background: #3366CC; 
    color: #fff; 
    font-size: .85em; 
    cursor: pointer; 
    } 

    #external-events p { 
    margin: 1.5em 0; 
    font-size: 11px; 
    color: #666; 
    } 

    #external-events p input { 
    margin: 0; 
    vertical-align: middle; 
    } 

    #calendar { 
    float: right; 
    width: 900px; 
    } 

</style> 
</head> 
<body> 

<div id='wrap'> 
<div id='external-events' style="display: none;"> 
<img alt="web applications logo" src="tax4t.png"> 
<h4>Workes list</h4> 
<div class='external-event'>John the first</div> 
<div class='external-event'>Mark the second</div> 
<div class='external-event'><button id="mecbtn" type="button">Mecanic Test</button>    </div> 

我用myscript.js获得JSON价值和创造的div。

window.onload = function() { 
var html=''; 
$.getJSON('trax4t/json/example.json', function(info){ 
for (var numero = 0;numero < info.length;numero++) { 
     var eventObjectFromDB = info[numero]; 
     var eventToExternalEvents = {"title":eventObjectFromDB.title, 
           "id":eventObjectFromDB.id, 
           "start":eventObjectFromDB.start, 
             "end":eventObjectFromDB.end, 
             "allDay":eventObjectFromDB.allDay}; 
$('#external-events').append("<div class='external-event'>"+ eventToExternalEvents.title +"</div>"); 
$('.external-event').addClass('fc-event-draggable'); 
}; 
}); 
}; 

你可以看到这是一个典型的带有外部事件列表的Fullcalendar。

现在我已经很累了。我希望事情不要混乱。我的代码有更多/ ... /零件然后实际的代码。我努力尝试。有人能告诉我我在这里错过了什么吗?

我希望这是足够的信息,但如果有必要,我会添加更多信息。提前感谢你!

+1

你好,再次问:P,你有没有注意到这个? [链接](http://arshaw.com/fullcalendar/docs/removed/draggable/)...尝试为每个事件对象添加可编辑属性,就像这样“可编辑”:true,你必须使用Jquery插件dragable和jquery ui核心,做到这一点。 –

+0

我已添加到'var eventToExternalEvents'“editable”:true,然后创建'$('external-event')。draggable();'。但没有区别:(也许我把它添加到错误的地方。 – Laci

回答

1

这是我第一次回答我自己的问题,但对于那些刚刚接触fullcalendar的人来说,它可能会很有用,并且它可能仍然需要更正,因为对此有更好的解决方案。

在外部myscript.js我反复的index.html的以下部分:

window.onload = function() { 
$.getJSON('json/example.json', function(info){ 
    for (var numero = 0;numero < info.length;numero++) { 
      var eventObjectFromDB = info[numero]; 
      var eventToExternalEvents =      
              {"title":eventObjectFromDB.title, 
           "id":eventObjectFromDB.id, 
           "start":eventObjectFromDB.start, 
             "end":eventObjectFromDB.end, 
             "allDay":eventObjectFromDB.allDay, 
        "editable":true}; 

    $('#external-events').append("<div class='external-event' id='mec"+numero+"'>"+ eventToExternalEvents.title +"</div>"); 
      var eventObject2 = { 
       title: $.trim(eventToExternalEvents.title) // use the element's text as the event title 
      }; 
      $('#mec'+numero).data('eventObject', eventObject2); 
      alert('#mec'+numero+''); 
      $('.external-event').draggable({ 
       zIndex: 999, 
       revert: true,  // will cause the event to go back to its 
       revertDuration: 0 }); 
      $('#calendar').fullCalendar('refetchEvents'); 
     } 
    }); 

这就是现在的工作。 Fullcalendar将为每个事件返回正确的标题。我使用for循环中的每个事件的个人ID,但可能我会改变从JSON文件加载的ID。这是你自己决定的。

0
function externalevents() { 
    $('#external-events .fc-event').each(function() { 

     // create an Event Object (http://arshaw.com/fullcalendar/docs/event_data/Event_Object/) 
     // it doesn't need to have a start or end 
     var eventObject = { 
      title: $.trim($(this).text()) // use the element's text as the event title 
     }; 

     // store the Event Object in the DOM element so we can get to it later 
     $(this).data('eventObject', eventObject); 

     // make the event draggable using jQuery UI 
     $(this).draggable({ 
      zIndex: 999, 
      revert: true, // will cause the event to go back to its 
      revertDuration: 0 // original position after the drag 
     }); 
    }); 
}