2016-03-18 12 views
0

以下は私のビューとモデルです。私が毎回initiateTestの呼び出し毎に新鮮なserverRequestDataデータを準備し、それをsaveメソッドに渡すときはっきりと毎回。保存メソッドでの予期しない動作

したがって、私のサーバーコールは、serverRequestDataに存在するデータで起こるはずです。 initiateTestの最初の呼び出しで正しく発生しますが、2回目以降は以前のサーバー呼び出しの応答が渡されます。

これは毎回新鮮な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

「[...]を2回目以降に言うと、以前のサーバコールの応答が受け継がれているのが分かります」と、渡されたとはどういう意味ですか? _what_に合格? –

+0

@ try-catch-finally 2回目以降は、実際にサーバーに渡されたデータが間違っている場合は、コンソールログが正しくなります。私はブラウザの "ネットワーク"タブで見ることができますまた、サーバー側では、それは印刷されている同じデータではないが、それは最後の要求のサーバーの応答です。 – hagrawal

+0

'that.model.testResults = response' ..?レスポンスは、モデルの属性とバックボーンによって自動的にマージされます。すべてのモデルプロパティは、モデルの属性ハッシュの外にあります。私は、あなたがバックボーンの仕組みを誤解していると思います。これらの手作りのようなものを手作業で処理しなければならない場合、バックボーンの必要はありません...古いjqueryの方法でこれを行うことができます... –

答えて

2

これはどのようにModel.save()作品です。バックボーンは、サーバーがサーバーの最新モデルの状態で応答することを期待しており、モデルはその応答で更新されます。

また:

(セットのように)属性のハッシュを変更したい属性が含まれている必要があります - 言及されていないキーは変更されません - をしかし、の完全な表現リソースは

サーバー強調鉱山)に送信されますので、あなたの最初の呼び出しの後、モデルは、サーバーの応答で更新され、次回以降から、それに沿って送信されますと彼はあなたがsave()に合格したとみなします。

サーバーに送信する内容を変更する場合は、saveメソッドを上書きすることができます。応答を受信したときにモデルに更新される内容を変更する場合は、parseメソッドを定義できます。

+0

ああ。あなたの入力をありがとう。私はまだあなたの入力でもう一度テストしていませんが、うまくいくと思います。 – hagrawal