2017-11-07 7 views
0

私はこのjSON構造を持っています。私はノックアウト観察可能なオブジェクトを生成することができる午前ノックアウトマッピング・プラグインで余分なproeprtiesとJSからのノックアウトマッピング

{ 
"customer": { 
    "idcustomer": 2, 
    "name": "test_2", 
    "vat": "test_vat_2", 
    "obs": "obs_2", 
    "deleted": 0 
}, 
"addresses": [ 
    { 
     "idaddress": 9, 
     "street": "street_2_9", 
     "number": "number_2_9", 
     "country": "country_2_9", 
     "default": true, 
     "label": "labe_2_9", 
     "deleted": 0 
    }, 
    { 
     "idaddress": 10, 
     "street": "1", 
     "number": "number_2_9", 
     "country": "country_2_10", 
     "default": false, 
     "label": "label_2_10", 
     "deleted": 0 
    } 
], 
"contacts": [] 

}

。しかし、マッピングパラメータを使用してオブジェクトに追加のプロパティを追加しようとすると、いくつかの問題があります。目標は、メインオブジェクトに「SelectedAddress」を追加し、各アドレスに「defaultLabel」観測値を追加することです。

現在、私がアドレス子どもたちにプロパティを追加するには、このマッピング構造を持っている:

var mapping = { 

'addresses': { 
    create: function (options) { 
     return (new (function() { 
      this.defaultLabel= ko.computed(function() { 
       return (this.default() == 0) ? "" : this.label(); 
       }, this); 
      ko.mapping.fromJS(options.data, {}, this); 
     })()); 
    } 
}, 

}

と、このメインJSONに "SelectedAddress" を追加する:

create: function (options) { 
     return new function() { 

      var model = ko.mapping.fromJS(options.data, {}, this); 
      // Direccion 
      model.direccionSeleccionada = ko.observable(); 
      model.getDireccion = ko.computed({ 
       read: function() { 
        if (model.direccionSeleccionada() != null) { 
         return model.direccionSeleccionada(); 
        } else { 
         return [{ 
           idaddress: -1, 
           street : '', 
           number: '', 
           country: '', 
           default: '', 
           label: '', 
           deleted: '', 
         }]; 
        } 
       }, 
       write: function(value) { 
        self.direccionSeleccionada(value); 
       }, 
       owner: self 
      }); 
     } 
    } 

私はそれらを持つ方法を見つけることができません

アイデア?

ありがとうございました

答えて

0

私はそれを理解しました。ちょうど誰かのために; generatintの「アドレス」のマッピングと同じように簡単に、別のマッピングを内部に追加します。

var mapping = { 
create: function (options) { 
    return new function() { 
     var model = ko.mapping.fromJS(options.data, { 
      'adresses': { 
       create: function (options) { 
        return (new(function() { 
         this.labelDefault= ko.computed(function() { 
          return (this.default() == 0) ? "" : this.label(); 
         }, this); 
         ko.mapping.fromJS(options.data, {}, this); 
        })(/* call the ctor here */)); 
       } 
      }, 
     }, this); 

     model.direccionSeleccionada = ko.observable(); 
     model.getDireccion = ko.computed({ 
      read: function() { 
       if (model.selectedAddress() != null) { 
        return model.selectedAddress(); 
       } else { 
        return [{ 
         idaddress: -1, 
         street: '', 
         number: '', 
         country: '', 
         default: '', 
         label: '', 
         deleted: '' 
        }]; 
       } 
      }, 
      write: function (value) { 
       self.selectedAddress(value); 
      }, 
      owner: self 
     }); 
    } 
} 

}

ありがとうございます!

関連する問題