2011-08-06 10 views
8

Zdefiniowałem zdarzenie $ (document) .ready() na stronie Site.Master i chcę również zdefiniować inny $ (document) .ready() w jednym z moich częściowych widoków (który jest używany do wyświetlania wiadomości i komunikatów o błędach) i wywołuję ten częściowy widok na wszystkich stronach i wszystkich częściowych widokach ...definiowanie zdarzenia gotowego jquery w widoku częściowym

częściowe widoki są wyświetlane na stronie, a także przy użyciu modalnego popup ... więc starał się to jednak gotowy wydarzenie w częściowym widokiem nie jest wypalania

mam kilka rzeczy zapytać:

  • jodeł t, czy można zrobić to, co próbuję zrobić ...
  • istnieją strony, które mają częściowy widok iz tego powodu strona ma dwa zdarzenia $ (document) .ready(), więc po załadowaniu strony, jest tam jakieś starcia między tymi dwoma wydarzeniami ...

a jeśli jakieś ciało może dostarczyć wTH jakiś przykład ...

+0

użyłeś 'ajax' do załadowania tych częściowych widoków? –

+0

yup im przy użyciu ajax.beginform lub ajax.actionlink podczas wywoływania/aktualizowania częściowego widoku ... –

Odpowiedz

5

Tak, można dołączyć wiele gotowych obsługi zdarzeń na stronie. Możesz umieścić je w szablonie głównym strony, widokach częściowych i wyświetlić samą stronę - tyle, ile potrzebujesz. Wszystkie muszą być zawarte w znacznikach skryptu. Wystrzelą w kolejności, w jakiej znajdują się na końcowej, renderowanej stronie. Zauważ, że chcesz być ostrożny, aby upewnić się, że część jest zawarta tylko raz na stronie lub że nie ma znaczenia, czy ten handler jest wywoływany wiele razy.

Przykład (nie pełne):

Master:

<script type="text/javascript" src="jquery.js"></script> 
<script type="text/javascript" src="jqueryui.js"></script> 
<script type="text/javascript"> 
     $(function() { 
      // do something for whole page 
     }); 
</script> 

@Html.Partial("ErrorDialog") 

Częściowy (ErrorDialog)

<div id="errorDialog" style="display: none;" title="Error"> 
    <p>An error occurred</p> 
</div> 
<script type="text/javascript"> 
     $(function() { 
      $('#errorDialog').dialog({ 
      modal: true, 
      autoOpen: false, 
      // more options 
      }); 
     }); 

     function showError(msg) { 
      $('#errorDialog').find('p').html(msg) 
          .stop() 
          .dialog('open'); 
     } 
</script> 
+1

to nie działa, jeśli istnieje wiele widoków częściowych. pierwszy częściowy widok w kolejności spowoduje, że jego dokument będzie gotowy, ale nie drugi. –

+2

@PinakinShah To nie powinno być prawdą, chyba że coś w pierwszej jest (a) nie działa lub (b) uniemożliwia działanie innym. Możesz mieć tyle, ile potrzebujesz. To powinno być prawdą, nawet jeśli są ładowane za pośrednictwem AJAX. Mam kilka stron, które są bardzo podobne, w których podzieliłem kod na dwie sekcje, które są zawarte niezależnie w zależności od tego, czy niektóre właściwości modelu są obecne, czy nie. Działa jak marzenie. – tvanfosson

4

tak wolno ci mieć wiele $(document).ready() na stronie po prostu upewnij się, że zawarł plik jquery przed wywołaniem tej funkcji. Functions wywoływana wewnątrz $(document).ready() wywoływana w kolejności, w jakiej są żądane.

jQuery - multiple $(document).ready ...?

+0

czy możesz mi podać dowolny przykład, jak powiedziałem, próbowałem, ale gotowe wydarzenie w częściowym widoku nie uruchamia się ... –

+0

@ dvlpr: Myślę, że tvanfosson to napisał, jeśli to nie rozwiąże problemu, daj nam znać! –

1

Tak, to prawda, tak długo jak poprzedni widok częściowy nie ma żadnego błędu możesz mieć tyle $ (document) .ready(), ile chcesz, i będzie on strzelał dla wszystkich.

Powiązane problemy