прототип и JQuery с node.js - PullRequest
       13

прототип и JQuery с node.js

0 голосов
/ 15 марта 2012

У меня есть файл js, который я пытаюсь использовать в приложении node.js. Я перепробовал все, что мог придумать, и у меня продолжают возникать проблемы либо с не определенными методами, либо с несуществующими объектами.

Это js-файл, который я включаю:

    var $ = require('jquery');

var CountdownTimer = function(options){

  this.settings = $.extend(
            {   
                          seconds: 60,
                          onTick: null,
                          onComplete: null
            },options || {});
};

CountdownTimer.prototype = {

  start: function(){
    this.reset();
    this.interval = window.setInterval($.proxy(this.tick, this), 1000);
  },

  reset: function(){
    if(this.interval){
      clearInterval(this.interval);
    }
    this.secondsRemaining = this.settings.seconds;
    this.tick();

  },

  tick: function(){
    this.hoursRemaining         = Math.floor(this.secondsRemaining / (60 * 60));

    this.minutesRemaining       = this.secondsRemaining % (60 * 60);
    this.hourMinutesRemaining   = Math.floor(this.minutesRemaining / 60);

    this.minuteSecondsRemaining = this.minutesRemaining % 60;
    this.hourSecondsRemaining   = Math.ceil(this.minuteSecondsRemaining);

    this.fHrs = this.formatNumber(this.hoursRemaining);
    this.fMins = this.formatNumber(this.hourMinutesRemaining);
    this.fSecs = this.formatNumber(this.hourSecondsRemaining);

    if(this.settings.onTick){
      console.log(this.settings.onTick);
      this.settings.onTick();
    }
    if(this.secondsRemaining == 0){
      this.complete();
    }
    this.secondsRemaining -= 1;
  },

  complete: function(){
    clearInterval(this.interval);
    if(this.settings.onComplete){
      this.settings.onComplete();
    }
  },

  formatNumber: function(n){
    var s = String(n);
    if(s.length == 1){
      s = '0' + s;
    }
    return s;
  }
}

module.exports = CountdownTimer;

Я звоню в app.js так:

var timer = new require('./countdown.js').CountdownTimer({
    seconds: 80000,
    onTick: function(){
      //do something
    },
    onComplete: function(){
      alert('complete');
    }
  });

timer.start();

Ошибка, которую я сейчас получаю:

TypeError: Функция объекта (опции) {

this.settings = $ .extend ({
секунд: 60, onTick: ноль, onComplete: null}, параметры || {}); } не имеет метода 'CountdownTimer'

Есть идеи, что я делаю не так?

1 Ответ

0 голосов
/ 15 марта 2012

Требуемая система создает пустой объект module.exports, к которому вы можете добавить свойства, но в своем коде вы перезаписываете его с помощью функции CountdownTimer. Что вы действительно хотите сделать, так это добавить свойство CountdownTimer к объекту module.exports.

Другими словами вместо:

module.exports = CountdownTimer;

запись:

module.exports.CountdownTimer = CountdownTimer;

Тогда, когда вы require('./countdown.js'); вернете то, что вы хотите. Который выглядит примерно так:

{
    'CountdownTimer': function CountdownTimer() { ... }
}
...