5

Mam fabrykę kątową, której zadaniem jest zapisywanie specjalnych obiektów i pobieranie ich później.
(Używany do zapisywania przepływu pracy użytkowników podczas przełączania widoków).Jak przenieść obiekty do tablicy wewnątrz prototypu JavaScript?

Zasadniczo potrzebuję zapisać obiekty z nazwą, a także tablicą tagów. Mój problem polega na zapisaniu tagów w części tablicy.

Prototyp konstruktor:

// define the TagsObject constructor function 
var TagsObject = function(name, tag) { 
    this.name = name; 
    this.tags = [].push(tag); 
    return this; 
}; 

Pełny kod fabryczny:

.factory('TagFactory', [function() { 

    // Init TagFactory: 
    var tagContainers = []; 

    // define the TagsObject constructor function 
    var TagsObject = function(name, tag) { 
     this.name = name; 
     this.tags = [].push(tag); 
     return this; 
    }; 

    console.log('tagFactory'); 
    console.log(TagsObject); 

    var saveTags = function(name, tag) { 

     tagContainers.push(new TagsObject(name, tag)); 

     console.log('saveTags:'); 
     console.log(tagContainers); 
    }; 

    var getTags = function(name) { 
     console.log(name); 
     return this; 
    }; 

    return { 
     saveTags : saveTags, 
     getTags : getTags 
    }; 
}]); 

W innym kontrolerze I teraz zaoszczędzić trochę danych do new Prototype wewnątrz TagFactory:

TagFactory.saveTags('TEST', tagObj); 

Teraz w mojej fabryce, gdzie widzisz console.log(nameTagContainers); dodaje się następujące dziennik:

[TagsObject] 
    0: TagsObject 
    tags: 1 
    name: "TEST" 
    __proto__: TagsObject 
    length: 1 
    __proto__: Array[0] 

^tags jest tablicą, ale to pokazano 1, zamiast detale obiektu ... widzisz, gdzie poszło źle?



UPDATE: To pytanie odpowiedział poniżej Kauê Gimenes jednak dzielę dodatkowy kod mam dodaną naprawić mój inny problem.

Który był za każdym razem nowy tag został wybrany dla aktualnie wybranej nazwy, to wygenerowany nowy prototyp, zamiast ratować znacznik do istniejącej prototype:

var saveTags = function(name, tag) { 

    console.log(tagContainers.length); 

    if (tagContainers.length != 0) { 
     for(var i = 0; i < tagContainers.length; i++) { 
      if (tagContainers[i].name == name) { 
       console.log('Found existing name! Add tag to existing obj'); 
       tagContainers[i].tags.push(tag); 
       break; 
      } else { 
       console.log('New name, create new obj'); 
       tagContainers.push(new TagsObject(name, tag)); 
      } 
     } 
    } 
    else { 
     console.log('New name, init: create the first obj'); 
     tagContainers.push(new TagsObject(name, tag)); 
    } 

    console.log(' '); 
    console.log('tagContainers:'); 
    console.log(tagContainers); 
}; 

Odpowiedz

2

Spróbuj podejście:

// define the TagsObject constructor function 
var TagsObject = function(name, tag) { 
    this.name = name; 
    this.tags = [tag]; 
    return this; 
}; 

najlepszym sposobem zainicjować tablica jest umieszczanie elementów wewnątrz wsporników

[ 1 , 2 , 3 ] 

Ale jeśli chcesz zainicjować z elementami n, możesz użyć funkcji concat.

[ 1 ].concat([ 2 , 3 , 4 ]) 

Wynik byłby:

[ 1 , 2 , 3 , 4 ] 
+0

Ach tak, że działa, i nie odpowiadać na to pytanie ... ale ja po prostu sobie sprawę, że napisał ten kod źle. Istnieje kilka tagów, które użytkownik może wybrać dla 1 nazwy. Teraz mój kod tworzy nowy prototyp za każdym razem, gdy użytkownik kliknie nowy znacznik tylko dla 1 nazwy. Dzięki! Muszę zaktualizować mój kod i ewentualnie opublikować nowe pytanie. –

+1

Załączam kilka dodatkowych informacji, aby odpowiedź była bardziej przejrzysta, jeśli nadal masz pytania na ten temat, możesz poprosić o to! –

+0

ah ok, więc * n * elementy Array może naprawić mój nowy problem tutaj –

Powiązane problemy