Позвоночник.js-как сохранить модель по форме и почте на сервер
Я n00b в BackboneJS / RequireJS, и я разрабатываю веб-приложение, которое использует RESTful API. Итак, у меня есть такая модель:
модели / домашнее животное.js
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;
});
коллекция: коллекции/домашние животные.js
define([
'backbone',
'models/pet'
], function(Backbone, PetModel){
var PetsCollection = Backbone.Collection.extend({
url: 'http://localhost:3000/pets',
model: PetModel,
});
return PetsCollection;
});
и представление, которое отображает форму для добавления новых моделей (возможно, это возможно другим способом более элегантным) просмотры / 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;
});
поэтому, когда я отправляю форму, я не отправляю никаких данных на сервер. Я не знаю, как это исправить. Есть идеи? Заранее спасибо!
2 ответов
вам нужно сначала установить атрибуты, а затем сохранить.
//Auxiliar function
getFormData: function(form) {
var self = this;
var unindexed_array = form.serializeArray();
$.map(unindexed_array, function(n, i){
self.model.set({
n['name']: n['value']
});
});
}
теперь this.model.save()
работает (сохранение на стороне сервера).
Вы можете видеть, как он работает в скрипка.
Model.save
ожидать объект / хэш новых значений, так же, как Model.set
. Здесь вы передаете строку в качестве аргументов атрибутов.