我一直在使用java EE后端构建自己的Backbone应用程序,我对Web服务和骨干之间的路径感到困惑。
这是我以下的例子:
http://coenraets.org/blog/2012/01/using-backbone-js-with-a-restful-java-back-end/
因此,我对此代码的理解是,当调用url wines:id
时,before函数会加载完整的葡萄酒列表,然后使用get()
方法查找您要查找的项目。
1。如果是这样,为什么网络资源中的findById
从未使用过呢?
2。如果我有各种各样的葡萄酒,这似乎是一种奇怪的方式,那么我怎样才能在骨干findByName
中使用wineresource
函数创建仅包含所需项目的集合?
3. 如果路线显示wines:id
已调用骨干函数但是这也会激活/wines/{id}
处的网络服务路径吗?
或者我对此代码有完全错误的理解?
我来自Java回归,我只是在理解骨干。
修改
我最好回答问题二:
如果我想使用findByName
只选择某些葡萄酒,我是否需要使用urlRoot: "api/wines/:id"
创建新的模型和集合?
编辑两个
对于我上面的解决方案, ID 是一个变量,如何设置网址以获取变量以及如何正确调用模型,传递所需的 ID 值?
Backbone.View.prototype.close = function () {
console.log('Closing view ' + this);
if (this.beforeClose) {
this.beforeClose();
}
this.remove();
this.unbind();
};
var AppRouter = Backbone.Router.extend({
initialize: function() {
$('#header').html( new HeaderView().render().el );
},
routes: {
"" : "list",
"wines/new" : "newWine",
"wines/:id" : "wineDetails"
},
list: function() {
this.before();
},
wineDetails: function(id) {
this.before(function() {
var wine = app.wineList.get(id);
app.showView( '#content', new WineView({model: wine}) );
});
},
newWine: function() {
this.before(function() {
app.showView( '#content', new WineView({model: new Wine()}) );
});
},
showView: function(selector, view) {
if (this.currentView)
this.currentView.close();
$(selector).html(view.render().el);
this.currentView = view;
return view;
},
before: function(callback) {
if (this.wineList) {
if (callback) callback();
} else {
this.wineList = new WineCollection();
this.wineList.fetch({success: function() {
$('#sidebar').html( new WineListView({model: app.wineList}).render().el );
if (callback) callback();
}});
}
}
});
tpl.loadTemplates(['header', 'wine-details', 'wine-list-item'], function() {
app = new AppRouter();
Backbone.history.start();
});
以下是模型:
window.Wine = Backbone.Model.extend({
urlRoot: "api/wines",
defaults: {
"id": null,
"name": "",
"grapes": "",
"country": "USA",
"region": "California",
"year": "",
"description": "",
"picture": ""
}
});
window.WineCollection = Backbone.Collection.extend({
model: Wine,
url: "api/wines"
});
这是WineResource服务:
@Path("/wines")
public class WineResource {
WineDAO dao = new WineDAO();
@GET @Path("{id}")
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
public Wine findById(@PathParam("id") String id) {
System.out.println("findById " + id);
return dao.findById(Integer.parseInt(id));
}
@GET @Path("search/{query}")
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
public List<Wine> findByName(@PathParam("query") String query) {
System.out.println("findByName: " + query);
return dao.findByName(query);
}