JS событий проблема - PullRequest
       4

JS событий проблема

0 голосов
/ 11 апреля 2011

Я хочу сделать какого-нибудь короля инспектора имущества, как любой иде.Вот мой код (он находится в разработке)

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 ??

look:

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

this.observedObject не определено

Заранее спасибо.

1 Ответ

0 голосов
/ 11 апреля 2011
var self = this;

document.getElementById(id+'_'+this.postfix).addEventListener('keyup', function(evt) {
    self.propertyValueChanged(evt);
}, false);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...