【问题标题】:Consuming RESTful Cakephp services in Backbonejs在 Backbonejs 中使用 RESTful Cakephp 服务
【发布时间】:2015-02-01 10:34:32
【问题描述】:

Cakephp 的 RESTful 服务以“URL.format”格式的 URL 提供,例如:“/recipes.json”或“/recipes/123.json”。 Backbone JS 的模型或集合使用“URL”格式来访问 RESTful 服务。例如:“/recipes”或“/recipes/123” 我们如何配置 Backbone 模型或集合以使用 Cakephp 的 RESTful 服务?

【问题讨论】:

  • 如何将 Backbone url 更改为 "/recipes.json" ,这是一些答案 `stackoverflow.com/questions/9431673/…
  • @Salines 当 url 为 "/recipes.json" 时,要检索 id: 123 的特定配方,则 url 将形成为 "/recipes.json/123"。这里 cakephp 需要的是“/recipes/123.json”

标签: json rest cakephp backbone.js


【解决方案1】:

我创建了一个模型,其同步方法如下所示

var ParentModel = Backbone.Model.extend({
    sync: function( method, model, options ) {
        options.url = model.url() + '.json';
        return Backbone.sync( method, model, options );
    }
});

现在这个模型“ParentModel”被其他模型继承了。也就是说,当从子模型调用同步/获取/保存时,url 正确地附加了格式字符串。

我也欢迎其他解决方案。请随时提供您的解决方案或提出改进建议。

【讨论】:

  • 覆盖sync 对你想要做的事情来说有点矫枉过正,我认为。 Backbone 通过覆盖url() 和/或urlRoot() 方法,有一种结构良好的方式来描述您想要与之交谈的端点。
【解决方案2】:

覆盖Backbone.sync 和朋友可能看起来是一个合理的解决方案,但这意味着您需要自己支持读/写/删除用例。对于您的用例,我建议覆盖 url()urlRoot() 方法以提供您想要的逻辑。使用基本方法可能最简单,然后添加“.json”:

var FooModel = Backbone.Model.extend({
    url: function() {
          var url = Backbone.Model.prototype.url.call(this);
          return url + '.json';
    },

    urlRoot: function() {
        return '/foo';
    }
});

对于集合,您可以直接提供 URL:

var FooCollection = Backbone.Collection.extend({
    model:  FooModel,
    url: function() {
        return '/foo.json';
    }
});

这允许您在集合之外使用模型,例如:

var model = new FooModel({ id: 50, name: 'foo50'});
model.url();  // <<=== returns '/foo/50.json'

它还允许您使用 Collection 来管理模型,例如:

var collection = new FooCollection([ { id: 30, name: 'foo30' } ]);
collection.url();  // <<=== returns '/foo.json'

var foo30 = collection.get(30);
foo30.url();  // <<=== returns '/foo/30.json'

【讨论】:

  • 如果在模型中调用了同步/获取,则此方法将起作用。如何使用这种方法进行收藏?因为对于集合,url 属性必须指定/返回实际的 url 对吗?
  • 更新了示例代码,以更好地说明如何将其与 Collection 一起使用;很抱歉没有在原始问题中看到该细节!
猜你喜欢
  • 1970-01-01
  • 2012-09-12
  • 1970-01-01
  • 2013-05-04
  • 2012-09-07
  • 1970-01-01
  • 2016-06-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多