如何在骨干网中设置自定义基础href?

时间:2012-03-29 12:16:13

标签: javascript backbone.js

我有一个html包装器应用程序从ipad文件存储加载所有js,css和图像。因此,UIWebView加载了不同的基本href。

加载骨干数据应该正常进入服务器。有没有办法在骨干网中设置基本href - 因此骨干对服务器而言是实际的,而不是文件存储?也许是以全球的方式?

2 个答案:

答案 0 :(得分:6)

一个选项是覆盖您想要“重新基础”的每个Collection或Model类型的url或urlRoot属性,如:

Article = Backbone.Model.extend({
  url: function() {
    return "http://myapiserver.com/articles/" + this.id;
    // Or slightly better, use some global for the base url and build from that
  }
});

如果您有很多模型和集合类型,并且您希望所有网址都重新基础,那么可以通过重写Backbone.sync(所有模型和集合CRUD操作调用)来提供更好的服务。在它被泵入$ .ajax()之前覆盖url。你可以这样做:

// We'll call the "standard" Backbone.sync to do the real work, so grab a
// reference to it.
var oldSync = Backbone.sync;

Backbone.sync = function(method, model, options) {
    var url = _.isFunction(model.url) ? model.url() : model.url;

    if (url) {  // If no url, don't override, let Backbone.sync do its normal fail
        options = options || {};
        options.url = "http://myapiserver.com" + url;
    }

    // Let normal Backbone.sync do its thing
    return oldSync.call(this, method, model, options);
}

我没有测试过那些确切的代码,但我认为它(或接近的东西)应该有用。

答案 1 :(得分:2)

如果您的意思是将模型设置为使用服务器存储:

 window.modelObject = Backbone.Model.extend({
    urlRoot: "/api/modelObject"
  });

收藏:

window.ObjectCollection = Backbone.Collection.extend({

model: modelObject 

 });

 window.UserObjectCollection = new ObjectCollection;
 window.UserObjectCollection.url = "/api/modelObjects"