【发布时间】:2017-04-04 16:56:49
【问题描述】:
如何使用 Backbone 读取 XML 并附加到视图中。
XML 文件已被读取并成功附加到视图中。但我不知道如何处理 Backbone 结构(使用它的模型)。
XML 文件(读取asseturl、width、height)
<library>
<assets>
<asset asseturl="img_1.png" width="100" height="150"></asset>
<asset asseturl="img_2.png" width="200" height="250"></asset>
<asset asseturl="img_3.png" width="300" height="350"></asset>
</assets>
</library>
主干js代码
var Book = Backbone.Model.extend();
var Books = Backbone.Collection.extend({
model: Book,
url: "file.xml",
parse: function (data)
{
var $xml = $(data);
return $xml.find('assets').map(function()
{
var bookTitle = $(this).find('asset').each(function(){
var this_url = $(this).attr('asseturl');
var this_width = $(this).attr('width');
var this_height = $(this).attr('height');
$('.character-list').append('<li><span class="asset char">'+
'<img width="'+this_width+'" height="'+this_height+'" src="'+this_url+'">'+
'</span></li>');
});
return {title: bookTitle};
}).get();
},
fetch: function (options)
{
options = options || {};
options.dataType = "xml";
return Backbone.Collection.prototype.fetch.call(this, options);
}
});
var bookListView = Backbone.View.extend({
initialize: function ()
{
this.listenTo(this.collection, "sync", this.render);
},
render: function ()
{
console.log(this.collection.toJSON());
}
});
var bks = new Books();
new bookListView({collection: bks});
bks.fetch();
要附加的 HTML 代码
<ul class="character-list">
</ul>
尽管上述附加功能对我有用,但在 Backbone parse 函数中处理它并不是一个好习惯。
【问题讨论】:
-
您可能想要做的是为解析函数中的每个资产创建模型并将它们添加到资产集合中。在您的 listView 中,您可以像在 parse 函数中那样渲染它们,或者更好的方法是为每个模型创建一个视图并让视图自己渲染。这将是处理模型和视图的更重要的方式。
标签: javascript jquery xml backbone.js