Backbone js base view / alternative

Salut, folosesc backbone js de ceva timp, dar nu am folosit nici un plugin pana acum, pentru ca inca nu stapaneam destul de bine nici MVC, nici js, nici backbone (am invatat lucrurile din mers). Sunt curios daca are cineva experienta cu plugin-uri pentru backbone, care usureaza munca cu subview-uri (atasare de subview-uri, stergere. etc).

Ce am gasit pana acum:

  1. https://github.com/tbranyen/backbone.layoutmanager
  2. https://github.com/rotundasoftware/backbone.subviews
  3. https://github.com/gmac/backbone.containerview

Si inca o intrebare, a folosit careva backbone cu react? Stiu ca sunt doua filosofii diferite, dar sunt curios daca a incercat cineva ceva cu react + backbone.

1 Like

Filozofia la Backbone e sa nu folosesti “silver bullet”. (reteta universala)
Fiecare chestie sa fie rezolvata cum e cel mai bine in situatia aia

Marionette http://marionettejs.com/ face View-uri misto. L-am folosit la un proiect mai mare.
Personal prefer sa le aranjez in asa fel incat sa am eu controlul manual si cat mai simplu. Ca daca pe viitor plugin-ul nu mai e dezvoltat, am si mai mari batai de cap la upgrade

O aplicatie la care lucrez acum incepe asa

var App = Backbone.View.extend({

        el: 'body',
        template: _.template(MainTemplate),

        events: {

        },

        initialize: function () {
            

            /**
             * Views init
            */

            this.companyView = new CompanyView({model: this.company});
            this.clientView  = new ClientView({model: this.client, collection: this.CompanyClients});
            this.invoiceView = new InvoiceView({
                                        model: this.invoice,
                                        settings: this.CompanySettings,
                                        products: this.CompanyProducts,
                                        company: this.company,
                                        user: this.user,
                                        client: this.client
                                    });
        render: function () {
            this.$el.append(this.template());
            this.invoiceView.setElement(this.$el).render();
            this.companyView.setElement(this.$el.find('#furnizor')).render();
            this.clientView.setElement(this.$el.find('#client')).render();
 
               return this;
        }
    });

    return App;
2 Likes

Mc. de raspuns. Totusi, din cate imi dau seama, atasezi noile view-uri direct la view-ul principal si asta nu presupune folosirea vreunui plugin. Ma gandesc ca ar fi mai frumos si mai clean, daca ar fi ceva api-uri ceva de genul:

`mainView.addSubview( 'subview1', new Subview() );`

sau

`var subview1 = mainView.getSubview( 'subview1' )`

In mare nu e mare diferenta fata de codul tau de mai sus.

Ceea ce ma intereseaza in mod principal si cred ca e un pattern destul de necesar, e cum fac sa transmit event-uri de la subview-uri la parent view. Ma gandesc ca trebuie sa fie vreun plugin care imbunatateste doar partea de management al view-urilor si subview-urilor, transmiterea de evenimente de la parent la child view si invers. Crearea de subview-uri stergerea lor intr-un api mai frumos.

Din ce am citit Marionette imbunatateste cam tot Backbone-ul, nu doar partea de view-uri, ceea ce e un pic cam mult. Chiar daca as putea folosi doar ce-mi trebuie, mi se pare foarte mult overhead, pentru o functionalitate destul de restransa.

Deocamdata experimentez diferite chestii, poate revin si eu cu un raspuns. Mc inca o data ca ai readus in discutie Marionette. Poate intr-o zi …

UPDATE: Am adaugat link-ul asta: https://github.com/gmac/backbone.containerview pare sa fie exact ce caut.

Eu de obicei incerc sa nu ma duc pe prea multe nivele.
Main-ul, intrarea in aplicatie, e cat mai decuplata posibil de subview-urile principale. Are mai mult rol de bootstrap
Subviews principale sunt fixe, nu se distrug, nu se re-render si NU au intre ele listners

In aplicatia asta care am dat-o exemplu, modelele se pornesc in Main si apoi sunt date ca parametri la creatul de views
Si event-urile circula dintr-un view in altul PRIN model
vezi in cod pe this.company si this.client

1 Like