Как передать содержимое переменной в функцию jquery? - PullRequest
0 голосов
/ 16 ноября 2011

Я довольно новичок в JavaScript и jQuery, поэтому, пожалуйста, ответьте на вопрос, если это простой вопрос. Я пробовал использовать функцию поиска здесь и в Google на нескольких сайтах JavaScript, но все еще не могу получить ответ, который решает мою проблему (и я бы понял ;-))

Я хочу построить календарь, который отображает события, которые хранятся в базе данных. Для этого я зацикливаю набор записей в начале моего скрипта и строю строку в переменной vEvents, которая в конечном итоге содержит это:

{ 
   title: 'new appointment', 
   start: '12-OCT-2011 14:00' 
}, 
{ 
   title: 'next appointment', 
   start: '12-OCT-2011 15:00' 
}

и так далее. Таким образом, каждое событие строится на основе информации, хранящейся в БД, а конечное число записей событий (между двумя фигурными скобками) неизвестно и может динамически изменяться для каждого вызова календаря.

Я использую плагин календаря jQuery (http://arshaw.com/fullcalendar), который создает календарь с помощью вызова jQuery, который выглядит следующим образом:

$('#calendar').fullCalendar({
            header: {
                left: 'prev,next today',
                center: 'title',
                right: 'month,agendaWeek,agendaDay',
            },
            editable: false,
            height: 370,
            firstDay: 1,
            weekMode: 'liquid',
            minTime: 8,
            maxTime: 22,
            weekends: false,
            //and now on to the event creation
            events: [
                {
                 title: 'this is a standard event',
                 start: '11-OCT-2011 16:00'
                },
                {
                 title: ' yet another demonstration event',
                 start: '11-OCT-2011 17:00'
                }]
});

То, что я хотел бы сделать, это заменить что-либо между скобками [] в этом вызове содержимым ранее созданной переменной, так что-то вроде

//and now on to the event creation
events: [
   $(vEvents) // or some other unknown syntax, or an evaluation function etc. that
              // replaces the varibale with it's content at that place
]   

Мне не удалось выполнить эту замену, я попробовал функцию eval() и некоторые другие подходы, но затем jQuery всегда жалуется на неправильный синтаксис. Так можно ли это сделать в целом, и, если положительный, как я могу это сделать? Если бы кто-то мог дать мне правильный синтаксис для этого, я был бы очень благодарен!

Большое спасибо

Stefan

Ответы [ 4 ]

3 голосов
/ 16 ноября 2011

Похоже, что для плагина fullCalendar требуется массив объектов.Так что если vEvents выглядит так:

var vEvents = [//this bracket starts an array
    {//this bracket starts an object
        title: 'new appointment',//this line defines the `title` property of the object it's in
        start: '12-OCT-2011 14:00'//this line defines the `start` property of the object it's in
    },//this ends the current object and the comma separates the two objects as items in an array
    { 
        title: 'next appointment', 
        start: '12-OCT-2011 15:00' 
    }
    //note that there is not a comma here, it's important that commas are only between objects and there is no trailing comma at the end of the list of objects
];//this bracket ends the array

Тогда вы можете просто установить параметр events для переменной vEvents, например:

$('#calendar').fullCalendar({
    ...
    //and now on to the event creation
    events: vEvents
});

- ОБНОВЛЕНИЕ -

//first, create an empty array
var myEvents = [];

//then iterate through your data
for (var rowIx = 0; rowIx < this.Data.Rows.length; rowIx++) {

    //and add an object, notice the `{` and `}` (brackets) that note the beginning and ending of an object definition
    myEvents.push({title : this.Data.Rows[rowIx][2].text, start : this.Data.Rows[rowIx][5].text;);
}

.push() добавляет значение в конец массива, поэтому здесь мы .push() объект в массиве.title : this.Data.Rows[rowIx][2].text добавляет свойство title к новому объекту и сопоставляет желаемое значение с этим свойством.

0 голосов
/ 16 ноября 2011

Простая переменная - это все, что вам нужно. Чтобы проверить это, сначала сделайте это

var vEvents = [
                {
                 title: 'this is a standard event',
                 start: '11-OCT-2011 16:00'
                },
                {
                 title: ' yet another demonstration event',
                 start: '11-OCT-2011 17:00'
                }
              ];

// Calendar code
  ...
  maxTime: 22,
  weekends: false,
  //and now on to the event creation
  events: vEvents });

Как только вы узнаете, что это работает, вы можете динамически заполнить массив vEvents данными, которые вы читаете из БД, просто добавив их в массив.

0 голосов
/ 16 ноября 2011

Для этого я зацикливаю набор записей в начале моего скрипта и строю строку в переменной vEvents

Вместо построения строки, вы могли бы построить объект JavaScript?

Если нет, сгенерируйте правильную строку в формате JSON , а затем используйте jQuery.parseJSON () , чтобы получить из нее объект JavaScript.

Имейте в виду, что vEvents должен быть массивом объектов.

Тогда просто используйте

$('#calendar').fullCalendar({
    events: vEvents
});
0 голосов
/ 16 ноября 2011

Вот ваша ранее созданная переменная. Это массив, обозначенный квадратными скобками.

var myEvents = [
            {
             title: 'this is a standard event',
             start: '11-OCT-2011 16:00'
            },
            {
             title: ' yet another demonstration event',
             start: '11-OCT-2011 17:00'
            }];

Вот ваши настройки календаря.

$('#calendar').fullCalendar({
        header: {
            left: 'prev,next today',
            center: 'title',
            right: 'month,agendaWeek,agendaDay',
        },
        editable: false,
        height: 370,
        firstDay: 1,
        weekMode: 'liquid',
        minTime: 8,
        maxTime: 22,
        weekends: false,
        events: myEvents
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...