モデルでフェッチ操作を実行すると、目的のデータをJSON形式で返すAPIが表示されます。モデルをコンソールに記録すると、変更されたオブジェクトに新しいデータが表示されます。バックボーンフェッチモデルからレンダービューへ
前とフェッチ後:
Object {
cid: "c1",
attributes: Object,
_changing: false,
_previousAttributes: Object,
changed: Object,
id: undefined,
_pending: false
}
Object {
cid: "c1",
attributes: Object,
_changing: false,
_previousAttributes: Object,
changed: Object[1],
id: undefined,
_pending: false
}
データは明らかにフェッチされ、それがモデルに存在しています。ただし、レンダリングすると、デフォルト値が表示されます。
App.Models.Document = Backbone.Model.extend({
defaults: {
id: '',
owner: 0,
created: '',
lastupdate: '',
content: 'Default document content'
},
url: '/api/'
});
App.Views.DocumentView = Backbone.View.extend({
tagName: 'textarea',
className: 'editor',
template: App.Template('editortemplate'),
initialize: function() {
// As proposed in so many similar questions
this.listenTo(this.model, "change", this.render);
},
render: function() {
this.$el.html(this.template(this.model.toJSON()));
$(".app-content").html(this.$el);
return this;
}
});
a = new App.Models.Document();
a.fetch();
b = new App.Views.DocumentView({ model: a });
b.render();
新しいデータでビューを正しく更新するにはどうすればよいですか?
モデルからデフォルトを削除すると、 'content'は定義されません。
それは '変更されたことを奇妙だ:'変更にObject'変更:オブジェクト[1]、 '。 APIから返されるデータの構造は何ですか? BTW idは、バックボーンによって使用される特別な属性です。 –
返されたデータは、JSONオブジェクト [{ "ID" である: "所有者"、 "1": "1"、 は "作成": "2016年4月30日21時57分23秒"、 " "content": "成功したAPIフェッチ" } – hesonline
これは、Backboneがモデル属性に設定する前に応答を処理するために 'parse()'を実装する必要があるか、またはフェッチする必要があることを意味します['Collection'](http://backbonejs.org/#Collection)からのそのRESTリソース。 –