Сериализация Backbone.js с корнями json - PullRequest
1 голос
/ 11 ноября 2011

Я обнаружил, что backbone.js ожидает json в следующей форме:

{ "ID": 5, "название": "Foo", "тело": "бар"}

Тем не менее, я считаю разумным иметь корни json, особенно когда модели вложены и связаны с другими моделями. Как мне убедить backbone.js понять json следующим образом:

{ "сообщение": { "ID": 5, "название": "Foo", "тело": "бар"}}

Ответы [ 2 ]

1 голос
/ 12 ноября 2011

Этот вопрос может означать две вещи:

  • у вас есть JSON и вы хотите создать новую модель
  • или у вас есть веб-сервис, который предоставляет следующую строку

Поскольку первое довольно тривиально, я полагаю, вы имеете в виду второй случай.

Если ваш веб-сервис выдает JSON, как этот, вы можете перезаписать метод parse моделей и коллекций BackboneJS.

По сути, вы можете воспользоваться реализацией разбора в Backbone для моделей и изменить его в соответствии со своими потребностями.

В вашем случае это должно сработать:

parse : function(resp, xhr) {
  return resp.message;
},

Реализация для коллекций может выглядеть иначе, я не пробовал.

0 голосов
/ 12 ноября 2011

Дайте мне знать, если это поможет. Вы можете увидеть это в действии здесь: http://jsfiddle.net/kahhor/haPFD/

(function($){

    window.MyModel = Backbone.Model.extend({
    defaults:{"message":{"id":5,"title":"Foo","body":"bar"}}
});

window.MyView = Backbone.View.extend({

        render: function() {
            template= _.template($('#template').html());
            $(this.el).html(template(this.model.toJSON()));
            $('#container').html(this.el);
        }
});

})(jQuery);

$(document).ready(function() {
    var MyModel1 = new MyModel ();

    var MyView1 = new MyView ({model: MyModel1});
    MyView1.render();
});

<div id="container"></div>

<script type="text/template" id="template">
    <%= message.id %><br>
    <%= message.title %><br>
    <%= message.body %><br>

</script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...