2012-10-27 10 views
11

Próbuję całkowicie usunąć atrybut z modelu szkieletu. Model jest wysyłany do interfejsu API, który nie jest zbyt elastyczny i ulegnie przerwaniu, jeśli wyślę dodatkowe atrybuty nad tymi, które mam wysłać, więc muszę usunąć atrybut, aby go już nie było.Całkowicie usuń atrybut z Backbone.js model

Próbowałem model.unset, od this question, ale kiedy wypiszę obiekt, atrybut, który próbuję usunąć, wciąż jest na liście, tylko z wartością null.

Potrzebuję, aby atrybut całkowicie zniknął.

Moja podstawowa struktura jest następująca:

model.unset("AttrName", "silent"); 

Odpowiedz

18

Problemem jest to, że one przy użyciu niepoprawnie parametry dla unset. "Cichy" powinien być częścią options hash, a nie osobnym parametrem. To działa:

model.unset("AttrName", { silent: true }); 

Powód dziwnego zachowania można zaobserwować od annotated source:

unset: function(attr, options) { 
    (options || (options = {})).unset = true; 
    return this.set(attr, null, options); 
}, 

Sposób unset zakłada, że ​​jego options parametr jest obiektem, a próby albo utworzyć lub zmodyfikuj go, a następnie przekazuje dalej do metody set. Jeśli zamiast tego przekazujesz ciąg znaków, nieumyślnym skutkiem kodu jest ustawienie wartości null, zamiast jej rozbrojenia.

+0

Jeśli zmienię opcje na mieszanie, spowoduje to zmianę zdarzenia, co jest dokładnie tym, czego staram się uniknąć za pomocą opcji cichej. – FrizbeeFanatic14

+0

@ FrizbeeFanatic14 coś innego jest nie tak - jeśli użyjesz tej składni, nie powinna ona wywoływać zdarzenia zmiany (właśnie to przetestowałem). – McGarnagle

+0

Masz rację, to było coś, co wywołało to wydarzenie. Dzięki. – FrizbeeFanatic14

1

zastąpić metodę toJSON od modelu i tylko to atrybuty, które chcesz wysłać.

Aktualizacja (dodany kod próbki)

Podczas wydłużania modelu dodać funkcję toJSON i powrót obiektu z pożądanych cech:

{ 
    toJSON : function() { 
     return { 
      name: this.get('name'), 
      age: this.get('age'), 
      phoneNumber: this.get('phoneNumber') 
     }; 
    } 
} 
+0

Jestem całkiem nowy, Backbone - dokładnie jak bym go o to? – FrizbeeFanatic14

0

Możesz spróbować tylko budowa obiektu tylko z właściwości, które chcesz (i wysłanie tego):

serializeModel: function() { 
    return { 
    email: this.$("#email").val(), 
    password: this.$("#password").val() 
    } 
} 
Powiązane problemy