2014-01-14 5 views
1

Я использую CORS, поэтому все API происходит на api.mywebsite.com, но веб-сайт предоставляется через веб-сайт.Backbone.js путь по умолчанию (субдомен)

Мне интересно, есть ли способ установить jQuery или Backbone, чтобы всегда делать запросы AJAX на мой api.mywebsite.com?

В других случаях, я хочу сделать это в моей системообразующей коллекции:

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

И для отдельных ресурсов, которые вы можете использовать функцию для генерации URL:

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

Магистраль имеет метод UrlRoot, который устанавливает корень всех запросов.

с сайта Backbone:

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

оповещения "/ книги/1083-LEM-Солярис"

Из курса вы можете изменить это относительный путь к чему-то другому: поставить точку в спереди отправьте его корневому сайту сайта или вашему конкретному корню сайта или дайте ему абсолютный путь.

Documentation

+0

Можете ли вы дать мне пример о том, как использовать определенный субдомен один раз и использовать все модели? – 0xSina

0

Конечно, в Jquery вы можете построить URL, чтобы все, что вам нравится в запросе AJAX. В том числе и к абсолютному 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> 

И затем я специально указал этот пример на моем локальном хосте. Вы хотите указать его в свой домен. Я включил все консольные журналы и доступные ответы для вашего удовольствия отладки. Оба варианта здесь - создание URL-адресов из идентификатора книги, так как это нормальное, что вы создаете, читаете, обновляете или удаляете с сервера. Я поместил этот скрипт прямо в тело страницы и просмотрел журналы консоли. Примечание. Магистраль ожидает ответа 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> 

И скрипт php в url_test просто возвращает объект JSON.

<?php 
echo '[{"id": "MyNewBook"}]'; 
Смежные вопросы