Показать сообщение отдельно
  #7 (permalink)  
Старый 17.05.2015, 04:30
Интересующийся
Отправить личное сообщение для sexbot Посмотреть профиль Найти все сообщения от sexbot
 
Регистрация: 09.05.2015
Сообщений: 27

У меня возникли сложности с примером типо этого. Дело в том что если производишь действия типа этого `test = obj.test`, то при вызове test this ссылается уже на window, так же и у меня было когда обработчик пихал в массив

function Signal(context) {
  var self = this
    , callbacks = [];

  self.add = function(callback) {
    if (-1 == callbacks.indexOf(callback)) {
      callbacks.push(callback);
    } else {
      // throw Exception?
    }

    console.log(callbacks);
  };

  self.remove = function(callback) {
    var index = callbacks.indexOf(callback);

    if (index != -1) {
      callbacks.splice(index, 1);
    } else {
      // throw Exception?
    }

    console.log(callbacks);
  };

  self.removeAll = function() {
    callbacks = [];
  };

  self.emit = function() {
    for (var i = 0, len = callbacks.length; i < len; ++i) {
      callbacks[i].apply(context, arguments);
    }
  };
}

function Controller() {
  var self = this;
  
  var model = {
    value: 'foo',
    changed: new Signal(self),

    change: function(value) {
      if (model.value != value) {
        model.value = value;
        model.changed.emit();
      }
    }
  };

  var view = {
    informChange: function(val) {
      alert("New value of the model is " + val);
    }
  };

  model.changed.add(function() {
    view.informChange(model.value);
  });

  self.run = function() {
    setTimeout(model.change, 3000, 42);
  };
}

var controller = new Controller();
controller.run();
Ответить с цитированием