xml フィードからバックボーン コレクションを作成しています。xml フィードは 110 件の記事を返します (これは外部的なものであり、これより少なく返すことはできません)。次のように Backbone コレクションにロードします。
parse: function (data) {
xml = data;
$(xml).find('item').each(function (index) {
title = $(this).find('title').text();
description = $(this).find('description').text();
author = $(this).find('author').text();
pubDate = $(this).find('pubDate').text();
img = $(description).find('img:first');
if(img.length){
src = img.attr('src');
}
parsed.push({id:id, title: title, author:author,
description:description, pubDate:pubDate, src:src});
});
return parsed;
},
次に、最初の 10 項目を表示し、リストの下部にある [さらに読み込む] ボタンを表示します。ユーザーが「さらに読み込む」をクリックすると、バックボーン コレクションから次の 10 項目を読み込みたいと思います。ビューで、私はこれを行います:
loadMore: function(){
var ul = $('#news-list');
var id = ul.find('li:last-child').data("id");
var li="";
_.every(this.collection.toJSON(), function(item) {
if(item.id>id){
li += '<li class="topcoat-list__item" data-id="'+item.id+'">';
li += '<a href="#news-item/<%= item.id %>">';
li += '<img height="30" width="30" src="'+item.src+'">';
li += '<p>'+item.title+'</p>';
li += '<p>'+item.pubDate+'</p>';
li += '<span class="chevron"></span>';
li += '</a>';
li += '</li>';
}
if(item.id>(id+10)){
console.log('in loadMore if');
return false;
}
return true;
});
ul.append(li);
}
したがって、 each ループは最初の 10 個の項目を循環し、それらが既に読み込まれている (最後の li 子の id より小さい) ためスキップし、次の 10 個でリスト要素 html を作成して終了します。しかし、これは非効率に思えます。このプロセスを行うためのより良い方法はありますか?