2012-03-29 3 views
0

У меня есть приложение оболочки html, загружающее все js, css и изображения из хранилища файлов ipad. Поэтому UIWebView загружается с другим базовым href.Как установить пользовательскую базу href в позвоночнике?

Загрузка базовых данных должна поступать на сервер как обычно. Есть ли способ установить базовый href в магистрали - так что основа является реальной для сервера, а не для хранения файлов? Может быть, по-глобальному?

ответ

6

Одним из вариантов является переопределить 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 
    } 
}); 

Если у вас есть много моделей и коллекционеров по типам, и вы хотите, чтобы все их URL-адреса были повторно основаны, вам может быть лучше обслуживаться путем переопределения Backbone.sync (который вызывается всеми операциями модели и коллекции CRUD), чтобы переопределить URL-адрес, прежде чем он будет перенаправлен в $. Ajax(). Вы можете сделать что-то вроде этого:

// 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); 
} 

Я не проверял, что точный код, но я думаю, что это (или что-то близко) должны работать.

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"