2012-11-20 10 views
17

Ora sono uno sviluppatore front-end e ho un progetto che funziona bene con BackboneJS e il lato server è scritto da altri. C'è qualcuno che può dirmi come sovrascrivere cancellare, aggiornare, aggiungere e così via in un modo non RESTful? L'URL del lato server può essere simile a questo:come utilizzare Backbone.js, ma nel modo NO-RESTful?

  • aggiuntivi: www.domain.com/addBookById
  • rimuovere: www.domain.com/removeBookById

Grazie mille !!

+4

* Ora sono uno sviluppatore di front-end * ... ** Uh-oh ** Haha, solo scherzando ... – McGarnagle

+1

! guarda 'Backbone.sync' –

risposta

19

Backbone utilizza Backbone.sync di gestire tutte le comunicazioni con il server. Ci sono due cose importanti su sync per te; prima di tutto, sembra che questo:

La firma del metodo di Backbone.sync è sync(method, model, [options])

  • metodo - il metodo CRUD ("create", "read", "update", o "delete")
  • modello - il modello da salvare (o collezione da leggere)
  • opzioni - di successo e di errore callback, e tutte le altre opzioni di richiesta di jQuery

e la seconda è che è possibile ignorare sync su una base per modello e per-raccolta. Così si può aggiungere la tua sync implementazione al modello:

var M = Backbone.Model.extend({ 
    sync: function(method, model, options) { 
     //... 
    }, 
    //... 
}); 

Se si guarda al method si può decidere quali URL da utilizzare e se si sta facendo un GET, POST, ... richiesta. Lo model indicherà quali dati inviare al server. Ti consigliamo di unire options nelle opzioni $.ajax che desideri utilizzare. Dai un'occhiata all'implementazione standard di Backbone.sync, è abbastanza semplice e dovrebbe mostrarti cosa devi fare: basta sostituire la gestione dell'URL e rilasciare alcune delle funzionalità che non ti interessano (come ad esempio emulateHTTP e emulateJSON).

+0

Panoramica eccellente. – alex

0

Ecco un esempio di una chiamata AJAX Backbone.js modificata:

var Forecast = Backbone.Model.extend({ 
    url: function() { 
    return "http://api.wunderground.com/api/7eaec3b21b154448/conditions/q/" + this.get("zip") + ".json"; 
    }, 
    parse : function(data, xhr) { 
    var observation = data.current_observation; 
    return { 
     id: observation.display_location.zip, 
     url: observation.icon_url, 
     state: observation.display_location.state_name, 
     zip: observation.display_location.zip, 
     city: observation.display_location.city, 
     temperature: observation.temp_f 
    }; 
    } 
}); 

Da: Elijah Manor's Intro to Backbone.JS

+0

il mio scopo è "Nel tradizionale stile RESTful," una risorsa in un url ", ma nel mio progetto, ho bisogno di considerare" sulla risorsa in url diverso ->/getxxbyxx, deletexxbyxx ", sono così confuso ! –

3

L'opzione migliore nel tuo caso è plug-in come Backbone.service. È il servizio Backbone per gli apis non restful o semi restful.

// define server targets/endpoints 
var targets = { 
    login: ["/login", "post"], 
    signup: ["/signup", "post"], 
    logout: ["/logout", "get"], 
    search: "/search" // defaults to get 
    resetPassword: ["/resetpassword", "post"], 
    updateSettings: ["/updateSettings", "post"] 
}; 

// standalone service 
var service = new Backbone.Service({ url: "http://localhost:5000", targets: targets }); 

// extend backbone model 
var User = Backbone.Model.extend(service); 

Si può usare in questo modo:

var user = new User(); 
user.login({ username: 'bob', password: 'secret' }); 
Problemi correlati