2015-10-02 2 views
0

У меня есть встроенный плагин jquery, чтобы узнать об этом. Он работает до сих пор, но я создал свой плагин вокруг нескольких дат тестирования, и теперь я пытаюсь открыть свой плагин с датами извне.Передать переменные моему плану jquery

здесь моя работа: jsfiddle

И я хочу назвать свой плагин протаскивать дней, как:

var days = [ 
    new Event('9-3','test1'), 
    new Event('9-5', 'test2'), 
    new Event('9-7', 'test3') 
]; 
$("#cal").calendar({ 
    year: "2015", 
    month: "9", 
    events: days 
}); 

Как я могу это сделать !? спасибо за помощь мне ...

+0

Возможно ли это? Ваш вопрос не очень ясен. –

+0

Вызовите плагин снаружи? – nowhere

+0

Вы пытаетесь использовать опцию 'events' в своем плагине? – lshettyl

ответ

2

Я обновил свой код здесь: http://jsfiddle.net/Lqratxp1/

Теперь вы можете создать объект, содержащий данные для событий, которые вы хотите создать. Теперь вы можете инициализировать его таким образом:

$("#cal").calendar({year:"2015" month:"9",events:{'9-3':'test1','9-4':'test2'}}); 

Все, что вам нужно было сделать, чтобы изменить календарь класс:

var days = []; 

$.each(config.events,function(k,v){ 
    days.push(new Event(k,v)) 
}); 

Это используется для преобразования объекта, который вы передаёте в качестве параметра в массиве Мероприятия.

Вот полный класс:

jQuery.fn.calendar = function(settings){ 

    var config = { 
    // default settings 
     year: "", 
     month: "", 
     events: [] 
    // ... 
    }; 
    // change default settings 
    if (settings) { config = $.extend({}, config, settings); } 

    var dayIndex = 0; 

    function Event(start,title){   

     var parts = start.split('-'); 
     this.start= new Date(parts[2] || new Date().getFullYear(), parts[0] - 1, parts[1]); 
     this.end= new Date(this.start);   

     this.title = title; 
    } 

    var days = []; 

    $.each(config.events,function(k,v){ 
     days.push(new Event(k,v)) 
    }); 


    var mon = config.month - 1; // (1) 
    var d = new Date(config.year, mon, 1); 
    var start = 2 - d.getDay(); 
    var dateobj = new Date(); 
    var table = ['<table>']; 

    while (d.getMonth() <= mon) { 
     table.push('<tr>'); 

     for (var i = 0; i < 7; i++) { 
      d = new Date(config.year, mon, start++); 
      tmp = '<td>'; 
      tmp += '<div class="date">' + d.getDate() + '</div><div class="titlecontainer">';    

      var events = days.filter(function(e){ return e.start <= d && e.end >= d;}); //get all events for this day    
      if(events.length){   
       events.forEach(function(e){ 
        tmp += '<div class="title">' 
         + e.title //+ ' grid:' + e.grid 
         + '</div>'; 
       }); 
      } 
      tmp += '</div></td>'; 
      table.push(tmp) 
     } 
     table.push('</tr>'); 
    } 
    table.push('</table>') 
    $(this).html(table.join('\n')); 
}; 


$("#cal").calendar({ year: "2015", month: "9",events:{'9-3':'test1','9-4':'test2'} });   
0

И, да, это возможно, только с корректировками чувствовать.

Я отредактировал вашу скрипку here.

var days = [ 
    new Event('9-3','test11'), 
    new Event('9-5', 'test22'), 
    new Event('9-7', 'test33') 
]; 

$("#cal").calendar({ year: "2015", month: "9", events: days }); 

Первая точка в том, что класс событий должен быть виден вне контекста плагина, в этом случае был внутри плагина Contex вы не смогли увидеть их Instantiate снаружи плагина.

Для облегчения создания плагина вы можете использовать объектные литералы, созданные в классе для создания объекта Event.

Смежные вопросы