2012-03-29 1 views
0

私はipadファイルストレージからすべてのjs、css、およびイメージを読み込むhtmlラッパーアプリを持っています。したがって、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 
    } 
}); 

モデルとコレクティすべてのモデルとコレクションCRUD操作によって呼び出されるBackbone.syncをオーバーライドして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" 
関連する問題