observer.js
上传用户:yfdli66
上传日期:2010-02-20
资源大小:47k
文件大小:4k
源码类别:

JavaScript

开发平台:

JavaScript

  1. /*------------------------------------------------------------------------------
  2. +                         控件数据显示    +
  3. + 观察者接口 Observer  主题接口  Subject
  4. +
  5. -------------------------------------------------------------------------------*/
  6. //定义观察者接口
  7. function Observer () {
  8. //interface
  9. this.update = update;
  10. function update () {
  11. }
  12. }
  13. //定义主题接口
  14. function Subject () {
  15. //interface
  16. this.attach = attach; //登记一个新的观察者
  17. this.detach = detach; //删除一个的观察者
  18. this.notifyObservers = notifyObservers; //通知所有登记的观察者
  19. function attach (observer) {
  20. }
  21. function detach (observer) {
  22. }
  23. function notifyObservers () {
  24. }
  25. }
  26. /*-----------定义具体的观察者--------*/
  27. //右边panel属性标签
  28. function PropertyLabelObserver () {
  29. //property
  30. this.object = null;
  31. //inhert
  32.      this.base=Observer;
  33.         this.base();
  34. //override
  35. this.update = update;
  36. //method
  37. this.setObject = setObject;
  38. function setObject (obj) {
  39. this.object = obj;
  40. }
  41. function update () {
  42. this.object.innerText = fSelectedObj.id;
  43. }
  44. }
  45. //获得焦点的控件改变颜色
  46. function focusCtlObserver () {
  47. //inhert
  48.      this.base=Observer;
  49.         this.base();
  50. //override
  51. this.update = update;
  52. function update () {
  53.             for (var i=0;i<sltObjArray.options.length;i++) {
  54. var obj = eval(sltObjArray.options[i].value);
  55.                 if ( obj.id==fSelectedObj.id ) {
  56.                  obj.StrokeColor='green';
  57.                     obj.strokeweight=2;
  58.                 } else {
  59.                  obj.StrokeColor='#000000';
  60.                     obj.strokeweight=1;
  61.                 } //end if
  62. } // end for
  63. }
  64. }
  65. //右边panel属性列表
  66. function PropertyListObserver () {
  67. //inhert
  68.      this.base=Observer;
  69.         this.base();
  70. //override
  71. this.update = update;
  72. function update () {
  73. propertyContext.setPropertyState(fSelectedObj);
  74. propertyContext.setProperty();
  75. }
  76. }
  77. //线条的重绘
  78. function LinesObserver () {
  79. //inhert
  80.      this.base=Observer;
  81.         this.base();
  82. //override
  83. this.update = update;
  84. function update () {
  85. if(fSelectedObj != null) {
  86.              if (fSelectedObj.ctlType!=CNST_CTLTYPE_LINES) {
  87. var aLines = fSelectedObj.line.split(";");
  88. for( var i = 0; i < aLines.length - 1; i ++ ){
  89. var lineObjStr = (aLines[i].split("TO")[0]).split(":")[0];
  90. var oLineStart = eval((aLines[i].split("TO")[0]).split(":")[1]);
  91. var oLineEnd = eval(aLines[i].split("TO")[1]);
  92. var posArray = cf_CalculateLinePos(oLineStart,oLineEnd);
  93. var str = lineObjStr + '.Points.value="'+posArray["x1"]+','+posArray["y1"]+' '+posArray["x2"]+','+posArray["y2"]+' '+posArray["x3"]+','+posArray["y3"]+' '+posArray["x4"]+','+posArray["y4"]+'"';
  94. eval(str);
  95. }
  96.              }//end if
  97. }//end if
  98. }
  99. }
  100. //设置left+top属性
  101. function leftTopPropertyObserver () {
  102. //inhert
  103.      this.base=Observer;
  104.         this.base();
  105. //override
  106. this.update = update;
  107. function update () {
  108. for (var i=0;i<tbProperty.firstChild.rows.length;i++) {
  109. obj = tbProperty.firstChild.rows[i];
  110. var ctl = obj.firstChild.firstChild.firstChild.firstChild.children[1].firstChild;
  111. if (ctl.tagName.toLowerCase()=="input") {
  112. if (ctl.fieldName=="left") {
  113. ctl.value = fSelectedObj.style.posLeft;
  114.                     } else if (ctl.fieldName=="top") {
  115. ctl.value = fSelectedObj.style.posTop;
  116. }
  117.                 }
  118. }
  119. }
  120. }
  121. /*--------end-具体的观察者-------*/
  122. //定义控件主题类
  123. function ControlSubject () {
  124. //property
  125. this.observerList = new Array(); //用来存储观察者
  126. //inhert
  127.      this.base=Observer;
  128.         this.base();
  129. //override
  130. this.attach = attach; //登记一个新的观察者
  131. this.detach = detach; //删除一个的观察者
  132. this.notifyObservers = notifyObservers; //通知所有登记的观察者
  133. function attach (observer) {
  134. var i = this.observerList.length;
  135. this.observerList[i] = observer;
  136. }
  137. function detach (observer) {
  138. }
  139. function notifyObservers () {
  140.             for (var i=0;i<this.observerList.length;i++) {
  141. this.observerList[i].update();
  142. }
  143. }
  144. }