#json #persistence #backbone.js
#json #постоянство #backbone.js
Вопрос:
Я обнаружил, что backbone.js ожидает json в следующей форме:
{«id»:5, «title»:»Foo», «body»:»bar»}
Однако я нахожу разумным наличие корней json, особенно когда модели становятся вложенными и связанными с другими моделями. Как я могу убедить backbone.js чтобы понять json таким образом:
{«message»:{«id»:5,»title»:»Foo», «body»:»bar»}}
?
Комментарии:
1. вы хотите отобразить это в шаблоне?
2. Я вижу, что полное использование шаблонов может быть проблемой. Да, я хотел бы использовать это в шаблоне.
Ответ №1:
Этот вопрос может означать две вещи:
- у вас есть JSON и вы хотите создать экземпляр новой модели
- или у вас есть веб-сервис, который предоставляет вам следующую строку
Поскольку первое довольно тривиально, я полагаю, вы имеете в виду второй случай.
Если ваш веб-сервис выдает подобный JSON, вы можете перезаписать parse
метод моделей и коллекций BackboneJS.
В принципе, вы можете воспользоваться реализацией Parse for models от Backbone и модифицировать ее в соответствии с вашими потребностями.
В вашем случае это должно сработать:
parse : function(resp, xhr) {
return resp.message;
},
Реализация для коллекций может выглядеть по-другому, я ее не пробовал.
Комментарии:
1. Изменяет ли это решение поведение, как Backbone.js оба анализируют ответ сервера и сериализуют модель? Спасибо за ответ.
2. Я так не думаю, но я не уверен на 100%.
Ответ №2:
Дайте мне знать, если это поможет. Вы можете увидеть это в действии здесь: 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>