Способы сохранения позвоночника.данные модели js?
Я больше занимаюсь разработкой переднего плана и недавно начал изучать позвоночник.js в мое приложение. Я хочу сохранить данные модели на сервере.
не могли бы вы объяснить мне различные способы сохранения данных модели (используя формат json). Я использую Java на стороне сервера. Также я в основном видел, как REST используется для сохранения данных. Поскольку я больше в front end dev, я не знаю об отдыхе и других подобных вещах.
было бы здорово, если бы кто-нибудь мог объяснить мне процесс с каким-то простым примером.
1 ответ:
в основном модели имеют свойство, называемое атрибутами, которые являются различными значениями, которые может иметь определенная модель. Backbone использует объекты JSON как простой способ заполнения этих значений с помощью различных методов, которые принимают объекты JSON. Пример:
Donuts = Backbone.Model.extend({ defaults: { flavor: 'Boston Cream', // Some string price: '0.50' // Dollars } });
для заполнения модели есть несколько способов сделать это. Например, можно настроить экземпляр модели путем передачи в JSON или использовать метод set (), который принимает объект JSON атрибутов.
myDonut = new Donut({'flavor':'lemon', 'price':'0.75'}); mySecondHelping = new Donut(); mySecondHelping.set({'flavor':'plain', 'price':'0.25'}); console.log(myDonut.toJSON()); // {'flavor':'lemon', 'price':'0.75'} console.log(mySecondHelping.toJSON()); // {'flavor':'plain', 'price':'0.25'}
так это позволяет нам сохранять модели и сохранять их либо на сервере. Существует целый ряд деталей, касающихся "что такое отдых / RESTful?"И это довольно трудно объяснить все это в короткой рекламе здесь. В частности, что касается сохранения REST и Backbone, то нужно обернуть голову вокруг семантики HTTP-запросов и того, что вы делаете с вашими данными.
вы, вероятно, привыкли к двум видам HTTP-запросов. Получить и отправить. В спокойной обстановке эти глаголы имеют особое значение для конкретных применений, которые предполагает костяк. Когда вы хотите получить определенный ресурс с сервера (например, модель пончика, которую я сохранил в прошлый раз, запись в блоге, спецификация компьютера), и этот ресурс существует, вы делаете запрос GET. И наоборот, когда вы хотите создать новый ресурс, вы используете пост.
прежде чем я попал в Backbone, я никогда даже не касался следующих двух методов HTTP-запроса. Поставить и удалить. Эти два глагола также имеют определенное значение для позвоночника. Когда вы хотите обновить ресурс, (например, изменить вкус лимонного пончика на лимонный пончик и т. д.) вы используете запрос PUT. Если вы хотите удалить эту модель с сервера все вместе, вы используете запрос на удаление.
эти основы очень важны, потому что с вашим приложением RESTful у вас, вероятно, будет обозначение URI, которое будет выполнять соответствующую задачу на основе типа глагола запроса, который вы используете. Например:
// The URI pattern http://localhost:8888/donut/:id // My URI call http://localhost:8888/donut/17
если я доберусь до этого URI, он получит модель пончика с удостоверением личности 17. Идентификатор :зависит от того, как вы сохраняете его на стороне сервера. Это может быть просто идентификатор вашего ресурса пончика в таблице базы данных.
если я сделаю PUT к этому URI с новыми данными, я буду обновлять его, сохраняя над ним. И если я удалю этот URI, то он очистит его от моей системы.
С POST, так как вы еще не создали ресурс, он не будет иметь установленного идентификатора ресурса. Возможно, цель URI, которую я хочу создать ресурсы, просто это:
http://localhost:8888/donut
нет фрагмента идентификатора в URI. Все эти проекты URI зависят от вас и того, как вы думаете о своих ресурсах. Но что касается RESTful design, я понимаю, что вы хотите сохранить глаголы своих действий в своем HTTP-запросе и ресурсы в качестве существительных, которые делают URI легко читаемыми и дружелюбными к человеку.
ты все еще со мной? : -)
Итак, давайте вернемся к размышлениям о позвоночнике. Позвоночник замечательный, потому что он делает много работать для вас. Чтобы спасти наш пончик и secondHelping, мы просто делаем это:
myDonut.save(); mySecondHelping.save();
позвоночник умный. Если вы только что создали ресурс пончика, у него не будет идентификатора с сервера. Он имеет что-то под названием cID, который является то, что магистраль использует внутренне, но так как у него нет официального идентификатора, он знает, что он должен создать новый ресурс, и он отправляет запрос POST. Если вы получили свою модель с сервера, она, вероятно, будет иметь идентификатор, если все было в порядке. В этом случае, когда вы сохраняете() Backbone предполагает, что вы хотите обновить сервер, и он отправит PUT. Чтобы получить определенный ресурс, вы должны использовать метод магистрали .fetch () и он отправляет запрос GET. Когда ты позвонишь .destroy () на модели он отправит удаление.
в предыдущих примерах я никогда явно не говорил Backbone, где находится URI. Давайте сделаем это в следующем примере.
thirdHelping = Backbone.Model.extend({ url: 'donut' }); thirdHelping.set({id:15}); // Set the id attribute of model to 15 thirdHelping.fetch(); // Backbone assumes this model exists on server as ID 15
позвоночник получит третью помощь в
http://localhost:8888/donut/15
он просто добавит / пончик стебель на ваш сайт корень.если ты все еще со мной, хорошо. Я думаю. Если только ты не запутался. Но мы все равно тащусь. Вторая часть - это серверная сторона. Мы говорили о разных глаголах HTTP и семантических значениях этих глаголов. Значения, которые вы, магистраль и ваш сервер должны совместно использовать.
ваш сервер должен понимать разницу между запросом GET, POST, PUT и DELETE. Как вы видели в приведенных выше примерах, GET, PUT и DELETE могут указывать на тот же URI
http://localhost:8888/donut/07
если ваш сервер может различать эти HTTP-запросы, он будет очень смущен относительно того, что делать с этим ресурсом.это когда вы начинаете думать о своем коде RESTful server end. Некоторые люди, как Руби, кому-то нравится .неть, я как PHP. Особенно мне нравится тонкий PHP микро-фреймворк. SLIM PHP-это микро-фреймворк, который имеет очень элегантный и простой набор инструментов для решения спокойных действий. Вы можете определить маршруты (URI), как в примерах выше и в зависимости от того, является ли вызов GET, POST, PUT или DELETE, он выполнит правильный код. Есть и другие решения, похожие на тонкий, как углубление, тоник. Я считаю, что большие фреймворки, такие как Cake и CodeIgniter, также делают подобные вещи, хотя мне нравится минимальный. Я сказал, что мне нравится Слим? ; -)
это то, что отрывок кода на сервере может выглядеть (т. е. конкретно в отношении маршрутов.)
$app->get('/donut/:id', function($id) use ($app) { // get donut model with id of $id from database. $donut = ... // Looks something like this maybe: // $donut = array('id'=>7, 'flavor'=>'chocolate', 'price'=>'1.00') $response = $app->response(); $response['Content-Type'] = 'application/json'; $response->body(json_encode($donut)); });
здесь важно отметить, что Backbone ожидает объект JSON. Всегда имейте ваш сервер назначить content-type как "application / json" и кодировать его в формате json, если вы можете. Затем, когда Backbone получает объект JSON, он знает, как заполнить модель, которая его запросила.
С SLIM PHP маршруты работают примерно так же, как и выше.
$app->post('/donut', function() use ($app) { // Code to create new donut // Returns a full donut resource with ID }); $app->put('/donut/:id', function($id) use ($app) { // Code to update donut with id, $id $response = $app->response(); $response->status(200); // OK! // But you can send back other status like 400 which can trigger an error callback. }); $app->delete('/donut/:id', function($id) use ($app) { // Code to delete donut with id, $id // Bye bye resource });
таким образом, вы почти сделали полный туда и обратно! Сходи за содовой. Мне нравится диета Mountain Dew. Принеси и мне тоже.
как только ваш сервер обрабатывает запрос, делает что-то с базой данных и ресурсом, готовит ответ (будь то простой номер состояния http или полный ресурс JSON), затем данные возвращаются в магистраль для окончательной обработки.
С помощью save(), fetch () и т. д. методы-вы можете добавить дополнительные обратные вызовы на успех и ошибку. Вот пример того, как я настроил этот конкретный торт:
Cake = Backbone.Model.extend({ defaults: { type: 'plain', nuts: false }, url: 'cake' }); myCake = new Cake(); myCake.toJSON() // Shows us that it is a plain cake without nuts myCake.save({type:'coconut', nuts:true}, { wait:true, success:function(model, response) { console.log('Successfully saved!'); }, error: function(model, error) { console.log(model.toJSON()); console.log('error.responseText'); } }); // ASSUME my server is set up to respond with a status(403) // ASSUME my server responds with string payload saying 'we don't like nuts'
в этом примере есть несколько разных вещей. Вы увидите, что для моего торта, а не set () ing атрибуты перед сохранением я просто передал новые атрибуты моему вызову сохранения. Backbone-это довольно ниндзя, который берет данные JSON повсюду и обрабатывает их как чемпион. Поэтому я хочу сохранить свой торт с кокосами и орехами. (Это 2 гайки?) В любом случае, я передал два объекта для моего сохранения. Атрибуты объекта JSON и некоторые параметры. Первое, {ожидание:правда} означает не обновление моей модели на стороне клиента, пока обе стороны сервера успешно. Успешный обратный вызов произойдет, когда сервер успешно возвращает ответ. Однако, поскольку этот пример приводит к ошибке (состояние, отличное от 200, будет указывать на магистраль для использования обратного вызова ошибки), мы получаем представление модели без изменений. Она все равно должна быть простой и без орехов. У нас также есть доступ к объекту ошибки, который сервер отправил обратно. Мы отправили обратно строку, но это может быть объект ошибки JSON с большим количеством свойств. Это находится в ошибке.атрибут responseText. Да, нам не нравится орешки.-
поздравления. Вы сделали свой первый довольно полный круговой переход от настройки модели, сохранения ее на стороне сервера и обратно. Я надеюсь, что этот ответ epic дает вам представление о том, как все это происходит вместе. Есть, конечно,много деталей, которые я курсирую мимо, но основные идеи Backbone save, RESTful глаголы, действия на стороне сервера, ответ здесь. Продолжайте просматривать основную документацию (которая очень легко читается по сравнению с другими документами), но просто продолжайте виду, что это занимает время, чтобы обернуть вокруг головы. Чем больше вы будете держать его, тем более свободно вы будете. Я узнаю что-то новое с позвоночником каждый день, и это становится действительно весело, когда вы начинаете делать прыжки и видите, что ваша беглость в этой структуре растет. : -)
удачи в кодировании!
редактировать: ресурсы, которые могут быть полезны:
другие подобные ответы на SO: как генерировать идентификаторы моделей с магистралью
On ОСТАЛЬНОЕ: http://rest.elkstein.org/ http://www.infoq.com/articles/rest-introduction http://www.recessframework.org/page/towards-restful-php-5-basic-tips