2013-04-08 5 views
2

Мой интерфейс - это магистраль, а интерфейс - это кодигнитор с контроллером REST Фила Стерджона.Проблемы с сервером и базовым сервером.

У меня есть одна модель: Издательство и один сборник: Издатели

App.Collections.Publishers = Backbone.Collection.extend({ 
    model: App.Models.Publisher, 
    url: '/restpublisher' 
}); 

мой контроллер RestPublisher имеет:

function index_post(){ 
    $this->response('in pulisher_post'); 

} 

function index_delete(){ 
    $this->response('in pulisher_delete'); 

} 

function index_put(){ 
    $this->response('in pulisher_put'); 
} 

Проблема заключается в том, что на this.model.save(); Урл, который уволен: http://pubhub.local/restpublisher/1111, где 1111 - это идентификатор.

проблема заключается в том, что я получаю 404. если я просто имитировать запрос, поставленный на http://pubhub.local/restpublisher/ все работает хорошо, и я предполагаю, что я могу получить параметры из request-> положить()

есть способ решить эту проблему ?

вопрос 2: может кто-нибудь объяснить мне, почему название действия должно начинаться с индекса? Почему я не могу просто написать действие: publishers_post, что при сохранении коллекции получат данные?

Большое спасибо! Roy

ответ

1

Начну со второго вопроса: я думаю, это просто проще разобрать, и это будет просто шаблон, так почему бы не index_?

Теперь, чтобы продолжить с интересной частью. Если ваша работа с моделями внутри коллекции, Backbone, в качестве поведения по умолчанию, будет использовать URL-адрес коллекции для построения по умолчанию для вашей модели (collection.url/model.id). Однако вы можете переопределить это, установив значение для URL вашей модели: url: '/restpublisher'.

Source

Edit:
Чтобы дать вам общее представление о том, как это работает, это проще указать код модели # URL-адрес Backbone в:

url: function() { 
    var base = _.result(this, 'urlRoot') || _.result(this.collection, 'url') || urlError(); 
    if (this.isNew()) return base; 
    return base + (base.charAt(base.length - 1) === '/' ? '' : '/') + encodeURIComponent(this.id); 
} 

Так в основном, если вы переопределить url в вашей модели, эта функция будет удалена, а поведение вам тоже не понравится.

+0

Магистральная модель наследуется от url коллекции, поэтому у нее уже есть url: "/ restpublisher". это на самом деле не проблема вообще ... проблема в том, что позвоночник производит URL http: //pubhub.local/restpublisher/1111, где codeigniter ожидает URL: http: //pubhub.local/restpublisher без прикрепленного идентификатора – royB

+0

Модель не наследует ничего (я не уверен, что термин * inherit * адаптирован в любом случае). URL-адрес оценивается «на лету» при необходимости, если он не указан в модели. Здесь, если вы укажете один, он больше не будет использовать URL-адрес коллекции. Именно то, что вам нужно. – Loamhoof

+0

Я мог бы изучить его, но поскольку я никогда не использовал CodeIgniter, я думаю, что это будет довольно медленно, потому что я должен сначала понять механизмы REST API. – Loamhoof

Смежные вопросы