Ich bin N00b in BackboneJS/RequireJS und ich entwickle eine Web App, die eine RESTful API verwendet. Also habe ich ein Modell wie folgt aus: Sammlungen/pets.jsBackbone.js - Wie man ein Formular per Formular speichert und auf den Server schreibt
define([
'backbone',
'models/pet'
], function(Backbone, PetModel){
var PetsCollection = Backbone.Collection.extend({
url: 'http://localhost:3000/pets',
model: PetModel,
});
return PetsCollection;
});
Und eine Ansicht, die macht:
models/
define([
'backbone'
], function(Backbone){
var PetModel = Backbone.Model.extend({
urlRoot: 'http://localhost:3000/pet',
idAttribute: '_id',
defaults: {
petId: "",
type: "",
name: "",
picture: "",
description: "",
breed: "",
size: "",
sex: "",
age: "",
adopted: false,
}
});
return PetModel;
});
eine Sammlung pet.js ein Formular, um neue Modelle hinzufügen (Vielleicht ist es möglich, eine andere Art und Weise eleganter) Aufrufe/petAddNew.js
define([
'jquery',
'backbone',
'models/pet',
'collections/pets',
'text!templates/pet/addNew.html'
], function($, Backbone, PetModel, PetsCollection, petAddNewTemplate){
var PetAddNewView = Backbone.View.extend({
el: $('#formAdd'),
template: _.template(petAddNewTemplate),
events: {
'click #add' : 'submitAdd',
},
initialize: function() {
this.model = new PetModel();
this.collection = new PetsCollection();
_.bindAll(this, 'submitAdd');
},
render: function() {
var view = this;
view.$el.html(view.template);
return view;
},
submitAdd: function(e) {
//Save Animal model to server data
e.preventDefault();
var pet_data = JSON.stringify(this.getFormData(this.$el.find('form')));
this.model.save(pet_data);
this.collection.add(this.model);
return false
},
//Auxiliar function
getFormData: function(form) {
var unindexed_array = form.serializeArray();
var indexed_array = {};
$.map(unindexed_array, function(n, i){
indexed_array[n['name']] = n['value'];
});
return indexed_array;
},
});
return PetAddNewView;
});
Also, wenn ich das Formular absende, poste ich keine Daten zum Server. Ich weiß nicht, wie ich es beheben soll. Irgendwelche Ideen? Danke im Voraus!
Warum sollten Sie nicht debuggen, was in Backbone passiert? In den meisten Fällen ist dies der schnellste Weg, um Ihre Probleme zu lösen (wie bei jedem Open-Source-Produkt). –
Ja, ich debuggte mit console.log in Chrome und die var "pet_data" zeigt das komplette JSON-Objekt serialisiert des Formulars, aber die Methode "Speichern" funktioniert nicht :( –
Danke @ J-unior Ich habe bemerkt, dass nicht debuggen in Server-Seite und ich habe bereits den Fehler gefunden.Ich bin jetzt glücklich: P –