Backbone.js i Ruby on Rails nowej emisji

głosy
-2

Ok, więc mamy żyć pchnął nasz pierwszy backbone.js aplikację, a teraz mamy nowy problem. Podobno kiedy początkowo załadować modele za komentarze i opinie, mają atrybuty „created_at”, które zawierają znacznik czasu, kiedy zostały one dodane. Kiedy edytować komentarz, a następnie wykonaj model.sync (), przechodzi „created_at” z powrotem na serwer. Teraz RoR aplikacja fauluje się o tym, jak i naszych Rails dev mówi mi, że nie może w żadnym wypadku pass „created_at” z powrotem do serwera i że jest obliczany tylko dla wyświetlacza.

Teraz coś musi dać. Albo muszę włamać Backbone i usunąć niektóre atrybuty przed synchronizacją () lub coś ma być zrobione na boku szyn.

Jaka jest twoja propozycja dla soluton?

A w każdym razie to, co można zrobić, aby nie przechodzić pewne atrybuty podczas model.sync ()? Będę naprawdę wdzięczny za pomoc.

Utwórz 24/05/2012 o 16:05
użytkownik
W innych językach...                            


2 odpowiedzi

głosy
1

Zabrakło mi do tego problemu z dokładnym próbuje odpowiedzieć na niezmiennych właściwościach. Problem z modeli szkielet, że domyślnie oni pisać wszystko albo nic. Ale można zrobić częściowych aktualizacji. Aby poradzić sobie z tym, że stworzył potomka Backbone.Model i overrode model.save tak:

    save : function(key, value, options) {
        var attributes, opts;

        //Need to use the same conditional that Backbone is using
        //in its default save so that attributes and options
        //are properly passed on to the prototype
        if (_.isObject(key) || key == null) {
            attributes = key;
            opts = value;
        } else {
            attributes = {};
            attributes[key] = value;
            opts = options;
        }

        //Now check to see if a partial update was requested
        //If so, then copy the passed attributes into options.data.
        //This will be passed through to Backbone.sync. When sync
        //sees that there's an options.data member, it'll use it instead of
        //the standard attributes hash.
        if (opts && opts.partialUpdate) {
            opts["data"] = JSON.stringify(attributes);
            opts["contentType"] = "application/json";
        }

        //Finally, make a call to the default save now that we've
        //got all the details worked out.
        return Backbone.Model.prototype.save.call(this, attributes, opts);
    }

To pozwala mi selektywnie dodawać atrybuty, które chcę backend tak:

//from the view - the GET may have delivered 20 fields to me, but I'm only interested
//in posting the two fields.
this.model.save({
    field1 : field1Value,
    field2 : field2Value
},{
       partialUpdate : true
});

Nie mogę powiedzieć, jak to uczynił moje życie o wiele łatwiejsze! Teraz biorąc pod uwagę, że niektórzy mogą zapytać, dlaczego nie po prostu przejść changedAttributes () JSON? Powodem jest to, ponieważ w niektórych przypadkach, zmienione atrybuty są przeznaczone tylko dla strony klienta, a konkretnie do wywołania zmiany poglądów, które również korzystają z tego modelu.

W każdym razie, to wypróbować ...

Odpowiedział 24/05/2012 o 16:23
źródło użytkownik

głosy
1

Można dodać do modelu:

attr_protected :created_at, :updated_at
Odpowiedział 24/05/2012 o 16:28
źródło użytkownik

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more