骨干路由和Web服务路径

时间:2014-02-21 20:29:12

标签: java javascript java-ee backbone.js

我一直在使用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);
}

0 个答案:

没有答案