Софтуерно Инженерство
Loading...
+ Нов въпрос
Alexander92 avatar Alexander92 1 Точки

ToDo List в IIFE Module

Здравейте, кодът е ето тука

http://stackoverflow.com/questions/36972230/todo-list-using-iife-module

А домашното е JavaScript Design Patterns, от този линк можете да го дръпнете  https://softuni.bg/trainings/1099/advanced-javascript-march-2015

Значи като си заредя HTML файла и натисна Create TODO List бутона, се създава нов TODO List и се появява  new section бутон и на този бутон съм му сложил ЕventListner и искам като го кликна да се извика класа Section и да ми нарави нов Section вътре в var container . Вътре във този EventListner ми дава грешка, че това, което се оптивам да апендна не е DOM елемент, а е стринг. 

Тоест може ли с минимални промени по JS файла ми, да ми покажате как трябва да стане кода,тоест да мога да си създавам много TODO Lista и във всеки от тях по много sections и да обясните защо, ако може.

А който иска да трупа точки във стек stackoverflow.com може да си копи - пейстне отговора там и ще му дам Best Answer.

 

0
JavaScript Advanced 02/05/2016 11:56:33
Filkolev avatar Filkolev 4428 Точки
Best Answer

Ами ти имаш елемент тип Section, не можеш просто така да го закачиш за дом елемент. Позабравил съм нещата и не знам доколко е правилно, но може да направиш поле, което да пази дом елемента на Section и след това да го достъпваш:

var Section = function (name) {
    this._name = name;
    this.domElement = document.createElement('section');
}

Ето тук не съм особено сигурен доколко е логично в прототипа да се обръщаш към this:

Section.prototype.createElements = function () {        
    var h4 = document.createElement('h4');
    h4.innerText = this._name;
    this.domElement.appendChild(h4);
    var ul = document.createElement('ul');
    this.domElement.appendChild(ul);
}

Може би вместо this.domElement е по-логично това да влезе като параметър на функцията - Section.prototype.createElements = function (domElement) и да се подаде отвън.

Самият ивент вече ще е:

btn.addEventListener('click', function () {
    var a = new ToDoList.Section(btn.previousSibling.value);
    a.createElements();
    container.appendChild(a.domElement);
});

Ето и демо: JSFiddle

1
02/05/2016 12:31:24
Alexander92 avatar Alexander92 1 Точки

Eй, благодаря ти, най сетне я разгадах тая задачка, 2 дни се мъчих, а без iife module, а просто халамалсаката за 15 мин написах решение, ама тва iife ми разказа играта

0