Показать сообщение отдельно
  #29 (permalink)  
Старый 25.11.2014, 07:19
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

devote, получается вроде наоборот. После

FormField.call(this, data);

вся тряхомудия FormFile будет перезаписана, или я все еще туплю. Общий чертеж как сейчас работает.

function FormField(elem){
 var // из елемента достаются всякие атрибуты единовременно
  ;

 return {
   elem:elem,
   validate:function(event){if(type in rules)//...},
   update:function(value){elem.value=value},
 }

}

function FormFile(elem){
 var // из елемента достаются всякие атрибуты единовременно
  ;

 return {
   elem:image_list,
   validate:function(){// тут все голимо, ибо такое поле обычно одно, ну или 2, х с ним},
   update:function(html){image_list.innerHTML=html;},
 }

}

// по change и input формы вызывается внешнее управление
var validate = function(event){
  var elem=event.target;
  try{
    if(elem.name && elem.name in inputs) // inputs - это коллекция тех самых
       inputs[elem.name].validate(event);
  }
  catch(err){
   // еррор хендлер, в частности
   inputs[name].elem.classList.add('invalid');
  }
};

// по onload xmlhttprequest еще раз внешнее управление
for(var name in data)
   inputs[name].update(data[name]);


Ну вот, так сейчас я сделал, все блин работает, почему - не понятно. То есть понятно - за счет особенности js грести под методы и кложи контекст. В терминах php хрень непостижимая. Вероятно и не надо тут пытаться воспроизвести классическое наследование. Те же задачи решаются просто в другой плоскости.

То есть у меня 2 как бы объекта с одинаковым интерфейсом. При чем про свой этот интерфейс объекты не знают, ибо он снаружи, а внутри чисто приватные переменные, которые загружаются из контекста. Чтобы до них добраться снаружи нужен getter, чтобы им присваивать нужен setter. Я почитал что вещь довольно новая и как-то не рискнул.

Последний раз редактировалось kostyanet, 25.11.2014 в 07:27.
Ответить с цитированием