AJax技术

javascript 学习(8)

字号+ 作者:H5之家 来源:H5之家 2016-09-12 15:17 我要评论( )

/** * Abstract.TimedObserver 也没有用 Class.create() 来创建,和Ajax.Base 意图应该一样 * Abstract.TimedObserver 顾名思义,是套用Observer设计模式来跟踪指定表单元素, * 当表单元素的值发生变化的时候,就

/**
 * Abstract.TimedObserver 也没有用 Class.create() 来创建,和Ajax.Base 意图应该一样
 * Abstract.TimedObserver 顾名思义,是套用Observer设计模式来跟踪指定表单元素,
 * 当表单元素的值发生变化的时候,就执行回调函数
 *
 * 我想 Observer 与注册onchange事件相似,不同点在于 onchange 事件是在元素失去焦点的时候才激发。
 * 同样的与 onpropertychange 事件也相似,不过它只关注表单元素的值的变化,而且提供timeout的控制。
 *
 * 除此之外,Observer 的好处大概就在与更面向对象,另外可以动态的更换回调函数,这就比注册事件要灵活一些。
 * Observer 应该可以胜任动态数据校验,或者多个关联下拉选项列表的连动等等
 *
 */
Abstract.TimedObserver = function() {}

/**
 * 这个设计和 PeriodicalExecuter 一样,bind 方法是实现的核心
 */
Abstract.TimedObserver.prototype = {
  initialize: function(element, frequency, callback) {
    this.frequency = frequency;
    this.element   = $(element);
    this.callback  = callback;
   
    this.lastValue = this.getValue();
    this.registerCallback();
  },
 
  registerCallback: function() {
    setTimeout(this.onTimerEvent.bind(this), this.frequency * 1000);
  },
 
  onTimerEvent: function() {
    var value = this.getValue();
    if (this.lastValue != value) {
      this.callback(this.element, value);
      this.lastValue = value;
    }
   
    this.registerCallback();
  }
}

/**
 * Form.Element.Observer 和 Form.Observer 其实是一样的
 * 注意 Form.Observer 并不是用来跟踪整个表单的,我想大概只是为了减少书写(这是Ruby的一个设计原则)
 */
Form.Element.Observer = Class.create();
Form.Element.Observer.prototype = (new Abstract.TimedObserver()).extend({
  getValue: function() {
    return Form.Element.getValue(this.element);
  }
});

Form.Observer = Class.create();
Form.Observer.prototype = (new Abstract.TimedObserver()).extend({
  getValue: function() {
    return Form.serialize(this.element);
  }
});
Ajax::prototype 源码解读 之 prototype.js 四[转载]
/**
 * 根据 class attribute 的名字得到对象数组,支持 multiple class
 *
 */
document.getElementsByClassName = function(className) {
  var children = document.getElementsByTagName('*') || document.all;
  var elements = new Array();
 
  for (var i = 0; i < children.length; i++) {
    var child = children[i];
    var classNames = child.className.split(' ');
    for (var j = 0; j < classNames.length; j++) {
      if (classNames[j] == className) {
        elements.push(child);
        break;
      }
    }
  }
 
  return elements;
}

/*--------------------------------------------------------------------------*/

/**
 * Element 就象一个 java 的工具类,主要用来 隐藏/显示/销除 对象,以及获取对象的简单属性。
 *
 */
var Element = {
  toggle: function() {
    for (var i = 0; i < arguments.length; i++) {
      var element = $(arguments[i]);
      element.style.display =
        (element.style.display == 'none' ? '' : 'none');
    }
  },

  hide: function() {
    for (var i = 0; i < arguments.length; i++) {
      var element = $(arguments[i]);
      element.style.display = 'none';
    }
  },

  show: function() {
    for (var i = 0; i < arguments.length; i++) {
      var element = $(arguments[i]);
      element.style.display = '';
    }
  },

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • Ajax 教程 入门 学习

    Ajax 教程 入门 学习

    2016-09-02 14:01

  • 学习javascript:牛人的讲座视频和PPT

    学习javascript:牛人的讲座视频和PPT

    2016-08-22 13:00

  • 最全面的JavaScript调试技巧总结

    最全面的JavaScript调试技巧总结

    2016-08-21 15:01

  • 学习javaweb时的Ajax笔记

    学习javaweb时的Ajax笔记

    2016-08-18 11:00

网友点评
a