2014-01-14 124 views
1

我使用CORS所以所有的API都發生在api.mywebsite.com,但網站是通過website.com提供的。Backbone.js默認路徑(子域)

我想知道是否有方法可以將jQueryBackbone的設置設置爲始終向我的api.mywebsite.com發出AJAX請求?

。換句話說,我想這樣做在我的收藏骨幹:

url: '/books' 

,並讓它自動推斷api.mywebsite.com/v1/books

回答

0

對於您可以指定完整的URL集合:

YourApp.Collections.Books = Backbone.Collection.extend({ 
    model: YourApp.Models.Book, 
    url: 'http://api.mywebsite.com/v1/books/' 
}); 

和各個資源可以使用函數生成的網址:

YourApp.Models.Book = Backbone.Model.extend({ 
    url: function() { 
    return 'http://api.mywebsite.com/v1/books/' + this.get('id') 
    } 
}); 
0

骨幹有urlRoot方法,設置所有請求的根源。

從骨幹網站:

var Book = Backbone.Model.extend({urlRoot : '/books'}); 
var solaris = new Book({id: "1083-lem-solaris"}); 
alert(solaris.url()); 

警報 「/書籍/ 1083-LEM-的Solaris」

中,當然你也可以切換到別的東西相對路徑:加一個點在前面將其發送到站點根目錄或您的特定站點根目錄,或給它一個絕對路徑。

Documentation

+0

你能給我舉一個例子關於如何使用指定子域名並讓所有模型使用該域名? – 0xSina

0

當然jQuery中你可以建立任何你在AJAX請求喜歡的URL。包括絕對URL,只要它不是另一個域:

$.ajax({ 
    type: "GET", 
    url: "http://api.mywebsite.com + "anything_you_want_to_add" 
}).done(function(response) { 
    console.log(response); 
    receiveResponseMethodSomewhereElse(response); 
}); 
0

而且使用模型的URL參數或集合的快速骨幹例如:

的顯示我用的腳本:

<title>Backbone Test</title> 
<meta charset="UTF-8"> 
<script src="jquery.js"></script> 
<script src="underscore.js"></script> 
<script src="backbone.js"></script> 

然後我特別指出了這個骨幹的例子在我的本地主機。你想把它指向你的域名。我包含了所有的控制檯日誌和可用的響應,以滿足您的調試樂趣。這兩個選項都是從書籍ID構建URL,因爲這正是您創建,讀取,更新或從服務器刪除的內容。我把這個腳本直接放在頁面的主體中,並觀看控制檯日誌。注意:Backbone期待JSON響應。

<script> 

     var Book = Backbone.Model.extend({urlRoot: 'http://localhost/url_test'}); 

     var BookCollection = Backbone.Collection.extend({ 
      model: Book, 
      url: 'http://localhost/url_test' 
     }); 

     var myExcellentBook = new Book({id: "book"}); 

     var MyBooks = new BookCollection(); 

     // getting it directly from the model 
     solaris.fetch({ 
      success: function(model, response, options) { 
       console.log("SUCCESS"); 
       console.log(model); 
       console.log(response); 
       console.log(options); 
      }, 
      error: function(model, response, options) { 
       console.log("ERROR"); 
       console.log(model); 
       console.log(response); 
       console.log(options); 
      }, 
      complete: function(xhr, textStatus) { 
       console.log(textStatus); 
      } 
     }); 

     // or fetch directly from the collection and 
     // normally you'd loop through the response or 
     // when creating new models, you can let backbone 
     // intialize them through the response 
     MyBooks.fetch({ 
      success: function(model, response, options) { 
       console.log("SUCCESS"); 
       console.log(model); 
       console.log(response); 
       console.log(options); 
      }, 
      error: function(model, response, options) { 
       console.log("ERROR"); 
       console.log(model); 
       console.log(response); 
       console.log(options); 
      }, 
      complete: function(xhr, textStatus) { 
       console.log(textStatus); 
      } 
     }); 
    </script> 

而url_test的php腳本只是返回一個JSON對象。

<?php 
echo '[{"id": "MyNewBook"}]';