2013-10-06 4 views
1

Я пишу приложение Family Tree, и у меня возникают проблемы с подключением дочернего элемента с родителем динамически. Я продолжаю получать сообщение об ошибке, когда родитель не определен. Поскольку для создания родительской функции использовалась одна и та же функция, я теряюсь в том, как идентифицировать родителя, а не передавать его через имя переменной, когда функция снова вызвана.Неопределенный родительский объект

Огромное спасибо всем, кто может указать мне в правильном направлении. Я, очевидно, не очень хорошо разбираюсь в javascript.

Обновление: я смог решить проблему, назначив каждый вызов функции соответствующей переменной имен. Благодаря помощи @ Oriol ниже!

var rafael_bravo = addFamilyMember("rafael_bravo", "Rafael Bravo", "-", "-", "-", god, "GeneralPartner"); 
var calixta_otero = addFamilyMember("calixta_otero", "Calixta Otero", "-", "-", "-", rafael_bravo, "LimitedPartner"); 
var omar_bravo = addFamilyMember("omar_bravo", "Omar Bravo", "-", "-", "-", rafael_bravo, "LimitedPartner"); 


    function addFamilyMember (child,name,dob,dod,img,parent,link) { 

        child = new primitives.orgdiagram.ItemConfig(); 
        child.name = name; 
        child.birth = dob; 
        child.death = dod; 
        child.image = "includes/images/" + img + ".png"; 
        child.templateName = "familyTemplate"; 
        parent.items.push(child); 

        jQuery(".basicdiagram").orgDiagram("update", primitives.orgdiagram.UpdateMode.Refresh); 
        return child; 
       } 
+0

Вне темы: когда вы переопределяете 'child', элемент, который вы передали как аргумент, не будет отличаться от функции, поэтому аргумент' child' бесполезен. – Oriol

+0

Вы говорите * та же самая функция была использована для создания родительского *, но я так не думаю. 'parent' - это просто аргумент, который может быть неопределенным. – Oriol

+0

@Oriol - Вот чего я боялся ... Как бы вы это исправили? – ojbravo

ответ

1

Вы можете использовать

var names = {}; 
function addFamilyMember (id,name,dob,dod,img,parentId,link) { 
    var child = new primitives.orgdiagram.ItemConfig(); 
    child.name = name; 
    child.birth = dob; 
    child.death = dod; 
    child.image = img ? "includes/images/" + img + ".png" : ""; 
    child.templateName = "familyTemplate"; 
    names[id] = child; 
    names[parentId].items.push(child); 
    jQuery(".basicdiagram").orgDiagram("update", primitives.orgdiagram.UpdateMode.Refresh); 
    return child; 
} 
addFamilyMember("rafael_bravo", "Rafael Bravo", "-", "-", "", "god", "GeneralPartner"); 
addFamilyMember("calixta_otero", "Calixta Otero", "-", "-", "", "rafael_bravo", "LimitedPartner"); 
addFamilyMember("omar_bravo", "Omar Bravo", "-", "-", "", "rafael_bravo", "LimitedPartner"); 

Также обратите внимание, что если вы используете "-" в img, браузер попытается загрузить includes/images/-.png, так что лучше использовать что-то falsy (как пустая строка "" или void(0) или false), а затем проверьте его. Я использовал пустую строку, но некоторые браузеры будут пытаться загрузить текущую страницу в качестве изображения, поэтому лучше, если вы создадите изображение, лучше проверьте child.image.

+0

Удивительный! Это должно делать свое дело! Я на самом деле просто придумал аналогичное решение о назначении каждой из вызовов функций addFamilyMember соответствующим образом названным var. – ojbravo

Смежные вопросы