javascript - 绑定(bind)第三级映射

标签 javascript knockout.js

您好,我有以下模型结构,但不幸的是调试器从未进入第三级映射,这一切都指向我如何使用与映射链接相关的构造函数,但不确定如何正确执行此操作。您能帮忙吗:

ReservationViewModel  = function (data) {
     var self = this;
     ko.mapping.fromJS(data, reservationOptionsMapping, self);
}
// 2nd level constructor
ReservationOptionsViewModel = function (data) {
     var self = this;
     ko.mapping.fromJS(data, reservationOptionsMapping, self);
}
 var reservationOptionsMapping = {
       'ReservationOptions': {
           key: function (reservationOption) {
               return ko.utils.unwrapObservable(reservationOption.Id);
           },
           create: function (options) {
              return new ReservationOptionsViewModel(options.data, 
           reservationOptionValuesMapping);
          }
       }
    }
//3nd level constructor
ReservationOptionsValuesViewModel = function (data) {
    var self = this;
    debugger
    ko.mapping.fromJS(data, reservationOptionValuesMapping, self);
}
var reservationOptionValuesMapping = {
   'ReservationOptionValues': {
       key: function (reservationOptionValues) {
            return 
ko.utils.unwrapObservable(reservationOptionValues.Id);
      },
      create: function (options) {
          return new ReservationOptionsValuesViewModel(options.data);
      }
  }
}

 var formControlsModel = new EditReservationViewModel(@Html.Raw(data));
   debugger;
   ko.cleanNode($('.modal-body')[0]);
   ko.applyBindings(formControlsModel, $('.modal-body')[0] );

我的数据结构如下所示:

var data = 
{"Id":1017,
"Title":"title1",
"LogoPath":"logo1",
"StartDate":"06/11/2017",
"EndDate":"06/11/2017",
"StartTime":"00:00",
"EndTime":"00:10",
"TimeSpan":1,
"MinPersons":2,
"MaxPersons":3,
"CompanyId":1,
"ReservationOptions":[{
    "Id":1011,
    "Title":"desc1",
    "Info":"info1",
    "TypeId":1,
    "TypeDescription":"Radio Button",
    "ReservationOptionValues":[
        {"Id":1034,"ValueTitle":"a"},
        {"Id":1035,"ValueTitle":"b"},
        {"Id":1036,"ValueTitle":"c"}],
    "NewValues":null}]};

最佳答案

您的第一级和第二级构造函数都使用相同的第二级映射对象。我认为您需要更改第二级构造函数以对其子级 (reservationOptionValuesMapping) 使用第三级映射,然后您的第三级构造函数根本不应该使用子级映射。

// 1st level constructor
ReservationViewModel = function(data) {
    var self = this;
    ko.mapping.fromJS(data, reservationOptionsMapping, self);
}
// 2nd level constructor
ReservationOptionsViewModel = function (data) {
    var self = this;
    //ko.mapping.fromJS(data, reservationOptionsMapping, self);
    ko.mapping.fromJS(data, reservationOptionValuesMapping, self);
}
//3nd level constructor
ReservationOptionsValuesViewModel = function (data) {
    var self = this;
    debugger
    //ko.mapping.fromJS(data, reservationOptionValuesMapping, self);
    ko.mapping.fromJS(data, null, self);
}

关于javascript - 绑定(bind)第三级映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47158758/

相关文章:

javascript - 下载数据时,JqueryUI 如何读取 jquery 请求上的数据?

jquery - Knockout.js:无法解析 JSON 中的绑定(bind)

jquery - 使用 jQuery 在 knockout 中插入可观察数组的好方法

javascript - 按钮上的单击事件禁用所需 html 的默认行为

javascript - 将对象数组从 EJS 模板传递到 Javascript 函数?

javascript - 在 JavaScript 中为饼图设置数据格式问题

javascript - IE8 knockout 3.3.0错误

javascript - 无法使用可计算的 knockout js

javascript - 回调函数不适用于 HTML5 视频播放器

javascript - Userscript - 有没有办法将 jquery 代码注入(inject)到 angularjs dom 中?