this.node.prototype[name] = function() { var event = new $.Event("before.node.btree"); var result; result = $.btree._data.container.triggerHandler(event, { "method_name" : name, "instance" : $.btree, "args" : args }); if (result === false) return; if (typeof result !== "undefined") args = result; result = value.apply( $.extend({}, this, { _callback : function (data) { $.btree._data.container.triggerHandler( name + '.node.btree', {"instance" : $.btree, "args" : args, "data" : data}); }, _rollback : function () { rlbk = this.get_rollback(); return rlbk; } }), args); return result; } } else { this.node.prototype[name] = value; } }, this));
this._data.node_data - to zwykły obiekt, klucze w nim to nazwy metod lub nazwy zmiennych, ktore beda w klasie this.n
ode, wartosci to wartosci zmiennych w klasie lub przyszle metody klasy.
this.node - to definicja klasy tylko, w tej petli wrzucamy w prototyp metody i zmienne przechowywane w this._data.node_data
ten kod dzialalby, jesli byloby samo:
this.node.prototype[name] = value;
ale potrzebuje rozszerzyc ta metode w taki sposob (z eventami), bo to bedzie mi dosyc potrzebne.
doszedlem do tego, ze kod jest zly w tym momencie:
$.extend({}, this, {
"this" nie odnosi sie do obecnej instancji klasy, tylko chyba do prototypu
pytanie brzmi: jak zmodyfikowac ten kod, zeby zachowac taka funkcjonalnosc i odniesc sie do obecnej instancji klasy?
kod sie uruchamia, ale nie zawsze jak robie w rozszerzanej metodzie np. this._opened = true to ta wartosc jest "gubiona" czy nie zapisywana w instancji tej klasy.