2011-10-14 17 views
10

Quisiera anular Backbone.sync pero también tener la funcionalidad Backbone.sync original ejecutada después de mis adiciones. Creo que es como llamar a super en una superclase en Java. ¿Hay alguna forma de hacer esto que no sea copiar todo el código anterior?Anular backbone.sync pero guardar su funcionalidad anterior

Respuesta

15

En JavaScript, puede almacenar cualquier propiedad o método en una variable. El siguiente ejemplo asignará Backbone.sync a otra variable y luego, al final de su función, lo llamará con todas las variables que se pasan a su nueva función Backbone.sync.

var originalSync = Backbone.sync; 
Backbone.sync = function() { 
    // Your code here. 
    return originalSync.apply(Backbone, arguments); 
}; 
+0

¡Perfecto! Gracias. – kreek

6

El answer proporcionado por Brian níquel anteriormente en realidad anular Backbone 's sync método, lo que afectará a todos los modelos de red troncal. Si lo que tenías en mente es para anular sync para un tipo de modelo individual, es posible que prefiera en su lugar el siguiente patrón (que también debe asegurarse de anular sync con la firma correcta de the Backbone docs):

var YourModel = Backbone.Model.extend({ 
    sync: function(method, model, options) { 
     // do your custom work here 
     return Backbone.Model.prototype.sync.call(this, method, model, options); 
    } 
}); 

Para obtener información más completa acerca de cómo funciona esto, consulte Backbone's annotated source sí mismo. Espero que ayude.

+1

no debería ser 'Backbone.Model.prototype.sync.call (etc etc)'? (el .Modelo no se encuentra) – mix3d

+0

Sí, gracias por la corrección – bosgood

Cuestiones relacionadas