我有三个模特(专辑,歌曲,艺术家),我希望得到一个特定类型的每个模型列表。现在这个应用程序的后端有一个API端点(/ browse),它获得两个参数(grenre(s)和项目类型('album','song'或'artist')并吐出JSON。
我不确定是否需要为每个要查询的模型设置单独的api端点,或者是否可以使用我现在拥有的后端。
此外,是否有任何复杂路由的好例子?网站上的例子非常基础......
我正在考虑像/ browse /(专辑|艺术家|歌曲)/流派+流派+流派/(评级|趋势|监听)这样的东西(这将是我发送回服务器的三个参数项目类型,类型(多个是可选的,我必须在路由中做一些正则表达式)和sortby)。
更新:这就是我所拥有的。
var Chart = Spine.Controller.sub({
events: {
'click .chart_clickthrough': 'chartNav',
'change input.browse_switch': 'refreshChart',
'change input.sort_switch': 'refreshChart'
},
browse: {
url: '/api/chart',
processData: true,
data: {
browse_object: 'song',
sort: 'trending',
genre: []
}
},
init: function() {
this.refreshChart();
},
render:function(model,sortby) {
var items = model.all();
if($('.chart_list').children.length > 0) {
$('.chart_list').html('');
}
if(model) {
//unbind the event for the model we aren't displaying. prevents the view from being updated too often
Song.unbind('refresh');
Artist.unbind('refresh');
Album.unbind('refresh');
model.bind('refresh', function() {
chart.render(model,sortby);
});
for(var i = 0, l = items.length; i < l; i++) {
//console.log(model.all()[i]);
var template = $('#chartTpl').html(),
data = items[i],
html = Mustache.to_html(template, data);
$('.chart_list').append(html);
}
}
},
refreshChart: function(e) {
if(e) {
e.preventDefault();
}
this.browse.data.browse_object = $('#BrowseOptions input[name=browse_object]:checked').val();
this.browse.data.sort = $('#BrowseOptions input[name=sort]:checked').val();
switch(this.browse.data.browse_object) {
case 'album': Album.fetch(this.browse);
this.render(Album,this.browse.data.sort);
break;
case 'song': Song.fetch(this.browse);
this.render(Song,this.browse.data.sort);
break;
case 'artist': Artist.fetch(this.browse);
this.render(Artist,this.browse.data.sort);
break;
}
},
chartNav: function(e) {
e.preventDefault();
var attr = e.target.attributes,
type = attr['data-type'].value,
id = attr['data-id'].value,
id2 = attr['data-album-id'].value;
//console.log('clicked id: ' + id + ', type: ' + type + ', album id: ' + id2);
if (type === 'Artist') {
this.navigate('/artist',id);
} else {
var albumId = type === 'album' ? id : id2;
this.navigate('/album', albumId);
}
}
});
答案 0 :(得分:2)
将多个客户端Spine.js模型指向单个服务器端路由应该没问题。在您的客户端代码中,您需要做的是在每个Spine.js模型中指定它们应该如何形成与服务器联系的URL:
见http://spinejs.com/docs/ajax,例如:
Contact.extend({ url:“/ users” });
在服务器端,你需要分别支持路由上的POST / GET / PUT / DELETE操作,分别用于C / R / U / D,并解析参数以确定预期的模型。 / p>