2011-04-11 145 views
0

我想做一个像任何ide一样的财产检查员的国王。这里是我的代码(开发it's)js事件问题

var PropertiesWindow = function(divId, title) { 
      this.propList = new Array(); 
      this.postfix = new Date().getTime(); 
      this.observedObject = null; 

      this.containerDiv = divId; 
      this.propIdSufix = 'prop_'; 
      title = title != undefined ? title : 'Properties'; 
      // create the header element 
      var header = document.createElement('div'); 
      // set same style 
      header.id = 'prop-header'+this.postfix; 
      header.innerHTML = format('<span>{0}</span>', title); 
      document.getElementById(divId).appendChild(header); 
      this.domElement = document.getElementById(this.containerDiv); 
      // set style 
     }; 

     PropertiesWindow.prototype.propertyValueChanged = function(ev){ 
      if(ev!=null && this.observedObject!=null){    
       var propName = ev.target.id.split('_')[0]; 
       this.observedObject[propName] = ev.target.value; 
      } 
     }; 

     PropertiesWindow.prototype.attachProp = function(id, description, 
       editor) { 
      if (this.domElement != null) { 
       var content = '<label style="margin-left:7px;margin-bottom:7px;float:left;">{0}</label><input id="{1}" type="text" style="border: solid 1px #aaaaaa;float:right;margin-right:7px;width: 70px;" />'; 
       content = format(content, description, id+'_'+this.postfix); 
       var divElement = document.createElement('div'); 

       divElement.id = this.propIdSufix + id; 
       divElement.style.clear = 'both'; 
       divElement.innerHTML = content;    
       this.propList.push(id); 
       this.domElement.appendChild(divElement); 
       document.getElementById(id+'_'+this.postfix).addEventListener('keyup', this.propertyValueChanged, false); 
      } 
     }; 

     PropertiesWindow.prototype.removeProp = function(id) { 
      if (this.domElement != null) { 
       var propId = this.propIdSufix + id; 
       var innerElement = document.getElementById(propId);// this.findProp(propId); 

       if (innerElement != null) 
        this.domElement.removeChild(innerElement); 
      } 
     }; 


     PropertiesWindow.prototype.subscribe = function(obj) { 
      obj.setListener(this); 
      this.observedObject = obj; 
      for (var propName in obj) { 
       var propElement = document.getElementById(propName+'_'+this.postfix); 
       if (typeof (obj[propName]) != "undefined" 
         && propElement != null) { 
        propElement.value=obj[propName]; 
       } 
      } 
     }; 

     PropertiesWindow.prototype.update = function(pname,val) { 
       var propElement = document.getElementById(pname+'_'+this.postfix); 
       if(propElement!=null) 
        propElement.value = val; 
    }; 

我有方法的问题attachProp我有这样的代码document.getElementById(id+'_'+this.postfix).addEventListener('keyup', this.propertyValueChanged, false);

我定义我的对象调用的方法propertyValueChanged 但是,当它被解雇我无法访问PropertiesWindow的属性。我明白,我是在其他情况下。是否有任何访问PropertiesWindow的属性?

看:

if(ev!=null && this.observedObject!=null){    
       var propName = ev.target.id.split('_')[0]; 
       this.observedObject[propName] = ev.target.value; 
      } 

this.observedObject未定义提前

感谢。

回答

0
var self = this; 

document.getElementById(id+'_'+this.postfix).addEventListener('keyup', function(evt) { 
    self.propertyValueChanged(evt); 
}, false);