2013-05-30 2 views
0

Я обновляя форму и я хочу, чтобы сделать запрос на обновление на serverwith идентификатор моя модель:Невозможно выполнить обновление на сервере с идентификатором

var CampaignEditModel = Backbone.Model.extend({ 
    urlRoot:"http://localhost:3033/campaign/update/", 
    url : function(){ 
     var url = this.urlRoot + this.id; 
     return url; 
    }, 
    idAttribute: "_id", 
    defaults:{ 
     "id":null , 
     "Name" :""    
    } 
}); 

делает функцию называется здесь:

$contents.empty().append(new EditView({model:editCampaigns}).render({id:id}).el); 

и визуализация функция:

render: function(options){ 
     this.$el.append(_.template(EditTemplate)); 
     this.model.set({"id":options.id}) 
     console.log(this.model.get("id")); 
     this._modelBinder.bind(this.model, this.el); 
     return this; 
    }, 
    events: { 
     'click .saveCampaign ': 'save' 

    }, 
    save:function(){ 
     this.model.set({ 
      "Name" :$('#edname').val(), 
     }); 
     this.model.save(null, {success: function(data){ 
      console.log("data:" + data); 
      require(['campaignroute'],function(routes){ 
       var router = routes.pageRouter; 
       router.navigate('gridView', {trigger: true}); 
      }); 
     }}); 
     return false; 
    } 

проблема даже я поставил перед собой идентификатор в модели еще когда метод сохранения называется запрос идти как этот

http://localhost:3033/campaign/update/undefined 

и консоль показывает EROR:

Failed to load resource: the server responded with a status of 404 (Not Found) 

, как решить эту проблему?

+0

Я сделал то, что вы сказали мне, и теперь идентификатор установлен, но все же я получил эту ошибку: не удалось загрузить ресурс: сервер ответил статусом 404 (не найден) http: // localhost: 3033/campaign/update/5c72e198-c8fd-11e2-9cfa-74867a028324 @akoskm – ana

ответ

1

Вместо передачи options к вашей пользовательской функции render(options) и настройка модели id там, установить его непосредственно на editCampaigns модели, перед входом render(options):

editCampaigns.set('id', id); 
$contents.empty().append(new EditView({model:editCampaigns}).render().el); 

и удалить дополнительный

this.model.set({"id":options.id}) 

от render(options) вместе с параметром options. Это должно выглядеть примерно так:

render: function(){ 
    this.$el.append(_.template(EditTemplate)); 
    console.log(this.model.get("id")); 
    this._modelBinder.bind(this.model, this.el); 
    return this; 
} 

Ваша модель также имеет дополнительную функцию: url

url : function(){ 
    var url = this.urlRoot + this.id; 
    return url; 
} 

вам не нужно это начиная с модели id автоматически добавляется после urlRoot.


Unrelated вам проблема, которую я вижу, что вы использовали

http://localhost:3033/campaign/update 

определить свой URL обновления. Используемый вами метод HTTP уже говорит о том, какое действие будет выполнено, поэтому вы можете (и должны) писать URL-адреса без глаголов. Просто удалите дополнительные /update.

Вот краткий обзор о передовом опыте: How to create REST URLs without verbs?

+0

Я сделал то, что вы сказали сейчас, выглядит так: http: // localhost: 3033/campaign/update/5c72e198-c8fd-11e2-9cfa-74867a028324 – ana

+0

и все еще я получаю эту ошибку: не удалось загрузить ресурс: сервер ответил статусом 404 (не найдено) @akoskm – ana

+0

/обновление не является проблемой bcz на сервере, на который отправлен запрос: app.post ('campaign/update /: id' , campaign.update); – ana

1

Дважды проверьте, что запрос является запросом поста и не запрос пут. Ошибки «Ошибка загрузки ресурса» обычно связаны с отсутствующим обработчиком запросов.

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