【问题标题】:Backbone - change default GET URL formatBackbone - 更改默认的 GET URL 格式
【发布时间】:2016-01-01 10:57:09
【问题描述】:

休息:

我的 REST API 位于以下 URL: http://localhost/Project/index.php/rest/resource/car

这会运行一个标准的 get 请求,将表中的所有数据作为 JSON 返回。 但是,我的 REST API 也有以下内容:

http://localhost/Project/index.php/rest/resource/car/carId/2.

使用时只返回 Car 的数据,carId = 2。

主干:

    this.mycar.fetch({
        data: { 'carId': '1' },
        success: function () { ...

在主干中运行上述代码将创建并运行如下所示的请求:http://localhost:7070/Project/index.php/rest/resource/car?carId=1,它与我的 REST api 不兼容,我该如何更改它?

编辑: 模型和集合:

var Car = Backbone.Model.extend({
    urlRoot: ROOT + 'car',
    idAttribute: 'carId'

});

var Cars = Backbone.Collection.extend({
    model: Car,
    url: ROOT + 'car',
})

【问题讨论】:

    标签: javascript json rest backbone.js


    【解决方案1】:

    data 属性是 jQuery $.ajaxdata 属性。对于GET 请求,它用于设置查询参数。

    您应该改为更新模型的 .url 方法/属性。

    直接设置为参数:

    this.mycar.url = 'api_entry_point/car/' + car_id;
    

    编辑:我刚刚注意到您的网址中有carId 作为资源。这是一个非常规的网址。看来这就是为什么您的模型构造函数中有 idAttribute: 'carId' 的原因。 carId 不必在网址中。可能是:

    http://localhost/Project/index.php/rest/resource/car/2
    

    在上面的 url 中,2 是模型 ID。绝对没有必要在网址中包含carId。此外,由于资源包含多个项目,使用 cars 而不是 car 段更有意义。

    http://localhost/Project/index.php/rest/resource/cars/2
    

    当然,这只是个人喜好。

    【讨论】:

    • 正如我在问题中提到的,我的模型中已经有一个 url:http://localhost/Project/index.php/rest/resource/car,它返回所有的汽车。进行更改会影响这一点吗?
    • @john 就像其他 JavaScript 对象一样,重置属性的值会覆盖之前的值。如果已经是所有车的入口,可以打码:this.mycar.url = this.mycar.url + '/' + carId
    • 抱歉,我很困惑,我已经编辑了问题并添加了我的模型...carId 未在我的模型中定义..
    • @john 没关系。模型 ID 不应在模型构造函数中硬编码。这就是为什么您调用还将与 url 相关的属性定义为方法。既然设置了urlRoot属性,就可以设置模型id,Backbone生成对应的url:this.mycar.set('carId', '....')
    • @john 欢迎您。我的最后一条评论有一个错字,应该是:'这就是为什么你可以 ...'。
    【解决方案2】:

    在你的主干模型文件中你可以这样传递

    url : return "http://localhost/Project/index.php/rest/resource/car/carId/=" + this.id;
    

    在你的主干视图中,你可以像这样传递

    this.model.id = this.id;
     this.mycar.fetch({
            success: function () {
    

    【讨论】:

    • 正如我在问题中提到的,我的模型中已经有一个 url:http://localhost/Project/index.php/rest/resource/car,它返回所有汽车。进行更改会影响这一点吗?
    • 然后你可以像这样的url传入模型:return "localhost/Project/index.php/rest/resource/car" + this.id;在你看来,如果你想传递汽车 ID,那么这样做 this.model.id = "carid/"+this.id; this.mycar.fetch({ success: function () { 如果不想通过则可以通过 this.model.id=""
    猜你喜欢
    • 2016-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-07
    相关资源
    最近更新 更多