2014-11-11 5 views
0

Это мой define():RequireJS: Как вернуть анонимный результат функции из метода define?

define([], function() { 

    var month = ['January', 'February', 'March', 
    'April', 'May', 'June', 'July', 
    'August', 'September', 'October', 
    'November', 'December' 
    ]; 
    var mydate = "", 
    mysec = ""; 

    // Code to prefix 0 for single digit date 
    if (new Date().getDate() < 10) { 
    mydate = "0" + new Date().getDate(); 
    } else { 
    mydate = new Date().getDate(); 
    } 

    // Code to prefix st, nd, rd, th before date 
    if (mydate == 1 || mydate == 21 || mydate == 31) { 
    mydate = mydate + "st"; 
    } else if (mydate == 2 || mydate == 22) { 
    mydate = mydate + "nd"; 
    } else if (mydate == 3 || mydate == 23) { 
    mydate = mydate + "rd"; 
    } else { 
    mydate = mydate + "th"; 
    } 

    return { 
    mydate: mydate, 
    mymonth: month[new Date().getMonth()], 
    mysec: function() { 
     if (new Date().getSeconds() < 10) { 
     mysec = "0" + new Date().getSeconds(); 
     } else { 
     mysec = new Date().getSeconds(); 
     alert(mysec); 
     } 
     return mysec; 
    }; 
    } 
}); 

И, следующий код показывает, где я называю это определенным возвращаемые значения методы:

define(["date"], function(date) { 

    return { 
    LoginValidate: function() { 
     $("#resp").append(date.mysec); 
    } 
    } 
}); 

Этим вопросом: Всякий раз, когда я называю свойство mysec из определенного метода , он всегда дает одни и те же секунды времени для каждой загрузки страницы. Если он дает 30 секунд, до тех пор, пока я не загружу страницу снова, я получаю только 30 секунд. Как получить последнее время (в секундах)?

ответ

0

Определение всего модуля оценивается только один раз, поэтому значение mysec не изменится от вызова к вызову. Если вы хотите, чтобы совать текущую дату каждый раз, когда вы получаете доступ к этой недвижимости, включите его в функцию вместо:

return { 
    mydate: function() { 
    var mydate = new Date().getDate() 
    if (mydate < 10) { 
     mydate = "0" + mydate; 
    } 

    // etc., other postprocessing 

    return mydate; 
    }, 
    // (...) 
} 

Тогда каждый раз, когда вам нужна свежая дата, вызовите эту функцию, чтобы создать его для вас:

define(["date"], function(date) { 
    return { 
    LoginValidate: function() { 
     $("#resp").append(date.mydate()); // notice function call 
    } 
    } 
}); 
+0

Спасибо за ваше время. ваш ответ решил мою проблему. но всякий раз, когда я добавляю результат '$ (" # resp "). append ('

' + date.mysec + '

');' он возвращает сама функция. если добавить прямо так: $ ("# resp"). append (date.mysec); ' он работает нормально. Скажите, как можно добавить это? – bakkupavan

+0

Вот почему я добавил комментарий «вызов функции уведомления». Ваш второй фрагмент работает, потому что [jQuery.append перегружен, чтобы принять параметр функции] (http://api.jquery.com/append/#append-function). Первый преобразует функцию непосредственно в String вместо ее вызова. Перейдите в '$ (" # resp "). Append ('

' + date.mysec() + '

');' (обратите внимание на '()'). – kryger

+0

Спасибо. Я выполнил свою задачу. – bakkupavan