2016-03-18 2 views
0

Ниже приводится моя точка зрения и модель. Ясно каждый раз, когда я готовлю свежие данные serverRequestData для каждого вызова initiateTest и передавая его методу save.Неожиданное поведение с сохранением метода

Итак, мой серверный вызов должен произойти с данными, содержащимися в serverRequestData. Это происходит правильно для первого вызова initiateTest, но со второго раза я вижу, что передается ответ предыдущего вызова сервера.

Это выглядит действительно странно для меня, потому что я готовлю свежие initiateTest каждый раз.

Что я делаю что-то не так, что привинчивает некоторые внутренние вещи backbone.js?

Вид:

define(['jquery', 'underscore', 'backbone', 'models/adhocmodel', 'models/resultmodel', 
     'text!templates/adhoc/adhocTemplate.html'], function($, _, Backbone, 
     adhocModel, resultModel, adhocTemplate) { 

    var adhocHistoryView = Backbone.View.extend({ 

     resultmod : new resultModel(), 
     model : new adhocModel(), 
     el : $("#container"), 

     events : { 
      "click #test" : "initiateTest" 
     }, 

     initiateTest : function() { 
      var serverRequestData = {"myid":"AAA", 
         "fname":"Wade", 
         "lname": "Wade", 
         "telephoneNumber":telNum, 
         "testMode":"Initial" }; 

      console.log(serverRequestData); 

      var that = this; 
      this.model.save(serverRequestData, { 
       url: "forms/serviceDiagnostic/startTest", 
       type: "POST", 
       contentType: "application/json", 
       success : function(model, response) { 
        that.model.adhocCommon.hasTestResultArrived = true; 
        that.model.testResults = response; 
        that.render(); 
        $('#container').trigger("create"); 
       }, 
       error : function(model, response) { 
        console.log("####### Error recieved ...."); 
       } 
      }); 
     }, 

     initialize : function() { 
     }, 

     render : function() { 

      console.log(this.model); 

      //this.$el.html(adhocTemplate); 
      var data = { 
        model:this.model, 
        _:_ 
      }; 
      var compiledTemplate = _.template(adhocTemplate, data); 

      this.$el.html(null); 
      this.$el.html(compiledTemplate); 
      return this; 
     } 
    }); 

    return adhocHistoryView; 
}); 

Модель:

define([ 'backbone' ], function(Backbone) { 

    var adhocModel = Backbone.Model.extend({ 

     initialize : function() { 

     }, 

     poolHandler : null, 

     poolCounter : 0, 

     adhocCommon : { 
      hasTestResultArrived : false 
     }, 

     testResults : {} 

    }); 

    return adhocModel; 
}); 
+0

Когда вы говорите '[...] со второго раза, я вижу, что ответ предыдущего вызова сервера передается', что вы имеете в виду с 'pass'? Передано кому-то? –

+0

@ try-catch-finally С второго раза журнал консоли корректен, когда данные, которые действительно переданы серверу, ошибочны. Я вижу на вкладке «сеть» браузера, а также на стороне сервера, что это не те же данные, которые печатаются, но это ответ сервера последнего запроса. – hagrawal

+0

'that.model.testResults = response' ..? Ответ будет автоматически слит с атрибутами моделей по магистрали. Все ваши свойства модели являются атрибутами атрибутов внешних моделей. Я думаю, вы неправильно поняли, как работает позвоночник. Если мы должны обрабатывать такие вещи вручную, тогда нет необходимости в магистрали ... мы можем сделать это старым способом jquery ... –

ответ

2

Это как Model.save() работает. Магистраль ожидает, что ваш сервер ответит последним состоянием модели на сервере, и ваша модель будет обновлена ​​с этим ответом.

также:

Атрибуты хеш (как в наборе) должен содержать атрибуты, которые вы хотели бы изменить - ключи, которые не упомянуты не будут изменены - , но полное представление ресурс будет отправлено на сервер (курсив)

Таким образом, после первого звонка, модель будет обновляться с ответом сервера, и со следующего раза и далее, он будет отправлен вместе с t он присваивает вам значение save().

Если вы хотите изменить то, что отправлено на сервер, вы можете перезаписать метод save, если вы хотите изменить то, что обновляется в модели при получении ответа, вы можете определить метод parse.

+0

О, хорошо. Спасибо за ваши материалы. Я еще не тестировал свои материалы, но, думаю, это будет работать, выглядит разумно. – hagrawal

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