我正在努力弄清楚如何在保持SEO的同时使用把手(在服务器和客户端上)实现Backbone。
考虑到我在网址中有一个RESTful API:
/api/submissions/:type?/:category?:offset?:limit?
当有人点击mydomain.com/
时,它会在此处初始化我的主干:
var site = window.site || {};
site.FeedSubmission = Backbone.Model.extend({
});
site.FeedSubmissions = Backbone.Collection.extend({
model: site.FeedSubmission,
url: '/api/submissions/?type=tip&offset=0,30'
});
site.FeedSubmissionView = Backbone.View.extend({
initialize: function() {
console.log(this.collection);
}
});
var submissions = new site.FeedSubmissions();
submissions.fetch({
success: function(coll, res, options) {
var feedSubmissionView = new site.FeedSubmissionView({
collection: submissions
});
feedSubmissionView.render();
},
error: function(coll, res, options) {
console.log('woops')
}
});
var feedSubmissionView = new site.FeedSubmissionView({
collection: submissions
});
这适用于我的集合实例化视图,但如果搜索引擎尝试索引该网站,它显然会造成麻烦,因为视图的渲染是用JS完成的。
基本上我想要两全其美:我想使用Backbone,但也可以获得为搜索引擎提供html的好处。我不要启动一个phantomjs实例或一些无头浏览器只是为了向搜索引擎提供我的内容。主要是因为它太多的开销和最好的片状。
我需要做什么?将数据引导到某些json并将其转储到页面中并覆盖Backbone的fetch
和sync
以填充模型/集合?