2013-02-01 12 views
8

Zajmuję się Backbone.js, ale nie rozumiem, gdzie umieścić cały jednorazowy kod jQuery, potrzebny do skonfigurowania mojej strony.Backbone.js: Gdzie mogę umieścić moją instalację jQuery?

Znacie coś: konfigurowanie wtyczki karuzeli jQuery, dodawanie strzałki "przewijania do góry" ... jednorazowej konfiguracji, która ma miejsce, gdy użytkownik po raz pierwszy ładuje stronę.

W tej chwili robię to w moim routerze:

var AppRouter = Backbone.Router.extend({ 
    routes: { 
    // some routes 
    }, 
    initialize: function() { 
    initializeJqueryStuff(); 
    } ... 
}); 
var StateApp = new AppRouter(); 
Backbone.history.start({ 
    pushState: true 
}); 
function initializeJqueryStuff() { 
    // one-off jQuery stuff goes here 
} 

Yeuch. Jak powinienem to robić? Czy inna właściwość obiektu Router powinna mieć initializeJqueryStuff? Czy to wszystko powinno żyć w środku initialize? A może powinienem zachować ten kod całkowicie oddzielony od aplikacji Szkielet?

+0

Czy możesz dać mi przykład kodu jQuery co musi zostać wdrożony na stronie obciążenia/app zacząć? Zwykle mam kod jQuery w widoku. Tak więc w zależności od tego, co próbujesz osiągnąć, możesz mieć "Widok układu", który uruchamia twój kod jQuery po renderowaniu widoku. Z drugiej strony byłbym lepszą pomocą, gdybyś mógł mi powiedzieć, jaki kod jQuery musi zostać zainicjowany na początku aplikacji. – TYRONEMICHAEL

Odpowiedz

1

Zwykle definiuję LayoutView, tj. Widok główny, który jest odpowiedzialny za renderowanie wszystkich "rzeczywistych" widoków w aplikacji. Ten widok układu jest inicjowany tylko raz, zanim będzie musiał zostać uruchomiony inny kod widoku. To także miejsce, w którym mam tendencję do wykonywania konfiguracji jednorazowych.

Próbka:

//LayoutView should be considered a singleton, only initialized once 
var LayoutView = Backbone.View.extend({ 
    el:'body', 

    initialize: function() { 
     this.initializeSomejQueryStuff(); 
    }, 

    renderChild: function(child) { 
     if(this._currentChild) 
      this._currentChild.remove(); 
     this._currentChild = child; 
     this.$el.html(child.render().el); 
    }, 

    initializeSomejQueryStuff: function() { 
     //init here 
    } 
}); 

Zastosowanie:

var AppRouter = Backbone.Router.extend({ 
    routes: { 
     "foo/:id": "foo" 
    }, 

    initialize: function() { 
     this.layout = new LayoutView(); 
    }, 

    foo: function(id) { 
     var model = new Foo({id:id}); 
     var view = new FooView({model:model}); 

     //delegate the view rendering to a layout 
     this.layout.renderChild(view); 
    } 
}); 
+0

Ciekawe podejście, dziękuję! – Richard

0

Hmm ... Przepraszam, jeśli przegapię jakieś szczegóły w przypadku mojego złego angielskiego. Ale jak widzę główny punkt twojego pytania: gdzie możesz skonfigurować i umieścić twoje rzeczy jQuery, które nie są powiązane z Tajemnicą? W sumie możesz oddzielić ten kod i po prostu połączyć go w .html

Szkielet tylko trochę MVC. Możesz manipulować funkcjami renderowania i niektórymi elementami js powiązanymi z widokami w Backbone.View.extend({...}), ale ogólnie uważam, że dobrym pomysłem jest stworzenie innej struktury dla różnych rzeczy. smth tak:

.../ 
    public/ 
     css/ 
     img/ 
     lib/ 
      ..any source code for your plugins.. 
     tpl/ 
      ..for your templates.. 
     js/ 
      models/ 
       models.js 
      views/ 
       ..your views.js.. 
      main.js(your backbone router and for example, .loadTemplate() func for templates and other) 
      ..any code for plugings configuration.. 

tak myślę, że struktura może pomóc w zrozumieniu tego, co jest źródłem tego, co cię kodowania i jasne.

Mam nadzieję, że było to pomocne. Przepraszam, jeśli źle zrozumiałem coś.

+0

OK, dzięki. Mój problem polega na tym, że muszę załadować wszystko w jQuery zanim zacznie się Backbone (ponieważ moje widoki Backbone mają pewne zdarzenia zależne od poprawnie zainicjowanych elementów jQuery). Jeśli zawinę zarówno plik jQuery, jak i plik kręgosłupa wewnątrz '$ (document) .ready()', czy mogę się upewnić, że wszystko ładuje się we właściwej kolejności? – Richard

+0

@Richard Ahhhh .... Rozumiem. Jeśli tylko widoki zależą od niektórych elementów jQuery. Po prostu umieść plik z tym elementem na pozycji przed połączeniem widoków, czytanie przepływu dokumentów krok po kroku. Najpierw w html, pierwsze ładowanie. Kolejka ładowania jest inna w różnych przeglądarkach, ale nie będzie problemów, ponieważ wszystkie z nich będą miały podobny przepływ. Graj i wypróbuj :) – Pruntoff

Powiązane problemy