1

以下に示すバックボーンモデルがあります

define([], function(){
    var instaceUrl;
    var PatientModel = Backbone.Model.extend({
        url: function() {
            return instanceUrl;
        },
        initialize: function(options) {
            instanceUrl = options.instanceUrl;
        },
        defaults: {
            "person": "",
            "identifiers":""
        }
    });
    console.log('Patient model');
    return PatientModel;
});

患者モデルを保存しようとすると、リクエスト ペイロードにpatientModel.save追加の属性が追加されますinstanceUrl

var patientModel = new PatientModel({instanceUrl: '/patient'});
...
...
patientModel.set("identifiers", identifiers);
patientModel.set("person", uuid);
patientDetails = patientModel.toJSON();
patientModel.save(patientDetails, {
    beforeSend : sendAuthentication,
    success : function(model, response, options) {
        uuid = response.uuid;
    },
    error : function() {
        alert('failed');
    }
});

モデルは次のペイロードを送信します

{
    "instanceUrl": "/patient", // why is it added ?
    "person": "c014068c-824d-4346-84f0-895eb3ec6af7",
    "identifiers": [
        {
            "preferred": true,
            "location": "f15bc055-765a-4996-a207-ec4945972f33",
            "identifier": "saks9639",
            "identifierType": "866aedab-8a37-4b15-95d3-2b775fc0caac"
        }
    ]
}

REST API 呼び出しを成功させるために必要なペイロードは次のとおりです。

{
    "person": "c014068c-824d-4346-84f0-895eb3ec6af7",
    "identifiers": [
        {
            "preferred": true,
            "location": "f15bc055-765a-4996-a207-ec4945972f33",
            "identifier": "saks9639",
            "identifierType": "866aedab-8a37-4b15-95d3-2b775fc0caac"
        }
    ]
}

モデル属性patientModelと見なされないようにする方法は?instanceUrl

4

1 に答える 1

2

モデル コンストラクター/初期化メソッドのメソッド シグネチャは次のとおりです。

コンストラクター /新しいモデルの初期化 ([属性]、[オプション])

最初に渡されたオブジェクトが属性として追加されます。instanceUrl最初のハッシュを渡すと、属性と見なされます。デモについては、この Fiddle を参照してください: http://jsfiddle.net/nikoshr/GADW7/

2 番目のオブジェクトを使用してオプションを宣言します1 :

var PatientModel = Backbone.Model.extend({
    url: function() {
        return this.instanceUrl;
    },
    initialize: function(attrs, options) {
        this.instanceUrl = options.instanceUrl;
    },
    defaults: {
        "person": "",
        "identifiers":""
    }
});

そして、あなたはそれを次のようにインスタンス化します

var patientModel = new PatientModel({}, {instanceUrl: '/patient'});

そしてデモhttp://jsfiddle.net/nikoshr/GADW7/1/


1 : インスタンスのメンバーとして設定したことに注意しinstanceUrlてください。モジュールに制限されていても、グローバル変数を使用すると、後で問題が発生する可能性があります。

于 2013-09-13T07:49:12.883 に答える