Способы сохранения позвоночника.данные модели js?


Я больше занимаюсь разработкой переднего плана и недавно начал изучать позвоночник.js в мое приложение. Я хочу сохранить данные модели на сервере.

не могли бы вы объяснить мне различные способы сохранения данных модели (используя формат json). Я использую Java на стороне сервера. Также я в основном видел, как REST используется для сохранения данных. Поскольку я больше в front end dev, я не знаю об отдыхе и других подобных вещах.

было бы здорово, если бы кто-нибудь мог объяснить мне процесс с каким-то простым примером.

1 84

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