RequireJS:如何从define方法返回匿名函数结果?

时间:2014-11-11 12:18:53

标签: 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秒。如何获取最新时间(秒)?

1 个答案:

答案 0 :(得分: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
    }
  }
});