2012-03-23 15 views
6

Bardzo podoba mi się koncepcja akcji ExtJS. Szukałem at this example i jest (prawie) dokładnie to, czego potrzebuję. Jedyną rzeczą jest to, że próbuję użyć wzorca MVC. mam:Gdzie Akcja ExtJS pasuje do wzorca MVC

  • invoicelist (zobacz)
  • Inovice (kontroler)
  • faktury (model)
  • Faktury (sklep)

Gdzie i jak mogę umieścić definicję działania ? Czy powinni być w kontrolerze? Jak do nich zadzwonić i nawiązać do nich? Potrzebuję kilku akcji i będą one w menu kontekstowym oraz w menu na pasku narzędzi invoicelist.

Odpowiedz

6

Dobre pytanie. Wygląda na to, że Actions przełamuje wzór MVC przez połączenie paradygmatów View i Controller pod jednym dachem. Ponieważ mają one programy obsługi, niesie ze sobą funkcjonalność, a także elementy interfejsu użytkownika, takie jak tekst i ikony. Jednak nie są one składnikami - w sensie ExtJS tego słowa. Dlatego nie możesz kierować ich na selektor.

Najlepszym sposobem na myślenie o nich jest jako obiekt konfiguracyjny. Nie więcej nie mniej. Obiekt konfiguracyjny sam w sobie nie ma znaczenia i nie może być celem. To samo z działaniami. Na przykład mogą być używane jako obiekt konfiguracyjny do przycisków.

Gdzie teraz powinny pójść? Odpowiedź na to, jak sądzę, zależy od ciebie jako projektanta. Ponieważ nie potwierdzają ścisłego schematu MVC, podejmujesz decyzję w oparciu o to, jak szeroko potrzebujesz dostępnej akcji. Dla prawdziwie globalnej akcji, która jest współdzielona przez wiele widoków, możesz nawet umieścić ją w konfiguracji aplikacji: MyApp.app.actions ["delete"] na przykład. Kontroler może być dobrym miejscem do umieszczenia go, jeśli kontroler skonfiguruje wiele widoków i połączy je ze sklepami. Mogą potencjalnie połączyć wiele widoków za pomocą akcji udostępnionych.

Mam nadzieję, że to pomoże. Powodzenia :)

+0

Dzięki. Obecnie próbuję utworzyć niektóre Akcje, które będą używane w jednym widoku. To jest okno z paskiem narzędzi i siatką. Akcja pojawi się w podmenu paska narzędzi oraz w menu kontekstowym, gdy użytkownik kliknie prawym przyciskiem myszy na wiersz siatki. W tym scenariuszu uważam, że powinienem umieścić go w kontrolerze dla tego okna, prawda? W jaki sposób? Służyłem do przesyłania zdarzeń z kontrolera do widoków, ale nie wiem, jak INSERT obiektów w interfejsie użytkownika. – Milan

+0

Co mógłbym zrobić, to utworzyć działania w twojej klasie widoku i uruchomić procedury obsługi zdarzeń. W klasie kontrolera możesz wysłuchać niestandardowych zdarzeń emitowanych z widoku. – dbrin

+0

Fragment kodu do wypalania niestandardowych zdarzeń z działań byłby bardzo cenny. – Milan

1

Po prostu zrób someview.fireEvent('Yourcustomevent');

Powiązane problemy