Mam obiekt mediatora, który obsługuje piaskownicy.

Każda piaskownica musi zarejestrować się w mediator. Ponieważ używam również wymagań, że jest to trochę problemu, ponieważ nie mam pojęcia, jak mogłem dzielić się instancją, a nie prototypem:

mediator.js.js

define([], function() {
    var Mediator = function() {};
    Mediator.prototype.start = function() {};
    Mediator.prototype.stop = function() {};
    Mediator.prototype.register = function() {};
    Mediator.prototype.unregister = function() {};
    return Mediator;
});

piaskownica_one.js

define(['mediator'], function(Mediator) {
    var mediator = new Mediator();
    mediator.register('sandboxOne', SandboxObject);
});

piaskownica_two.js

define(['mediator'], function(Mediator) {
    var mediator = new Mediator();
    mediator.register('sandboxtwo', SandboxObject);
});

Jak wspomniałeś o bieżącym podejściu, zarejestrowałem piaskownicy w dwóch różnych mediacjach. Jednym z pomysłu do rozwiązania byłoby to wykorzystanie wzoru singletonu, ale to konflikty z architekturą i rekomendacje w ..

Więc jakie inne sposoby mogłyby pozwolić, aby piaskownicy zarejestrowały się na tej samej instancji Mediator?

1
bodokaiser 23 wrzesień 2012, 12:27

2 odpowiedzi

Najlepsza odpowiedź

Ponieważ nie mogę publikować komentarzy, zamierzam opublikować odpowiedź.

Ggezad wyjaśnia, jak zrobić Singleton w wymaganiach tutaj: Czy jest to zła praktyka, aby użyć modułu Wymienne jako singleton?

Jego kod:

define(function (require) {
    var singleton = function () {
        return {
            ...
        };
    };
    return singleton();
});
2
Community 23 maj 2017, 12:12

Właściwie, z wymagać już otrzymujesz singletony, więc jeśli zadzwonisz:

require(['mediator'], function(Mediator) {
  ....
});

Mediator będzie zawsze tym samym obiektem. Jeśli jest to funkcja konstruktora, dzwoniąc do new Mediator(), zawsze będziesz tworzyć nową instancję, ale użyj tej samej funkcji za każdym razem.

Ale nie musisz zwracać funkcji:

define([], function() {
    return {
        start: function() {},
        stop: function() {},
        register: function() {},
        unregister: function() {}
    };
});

Teraz twój Mediator będzie instancją, a nie funkcją, a nie możesz go używać jako funkcji. Jesteś teraz na przykładzbie

require(['mediator'], function(Mediator) {
  Mediator.register('sandboxOne', SandboxObject);
});

Zrzeczenie się : Używam Wersja Wersja w wersji Dojo .

0
Danubian Sailor 26 luty 2014, 13:25