Javascript 在嵌套ObservalArray中映射数据时出现敲除问题

Javascript 在嵌套ObservalArray中映射数据时出现敲除问题,javascript,web,knockout.js,knockout-mapping-plugin,Javascript,Web,Knockout.js,Knockout Mapping Plugin,我很难在嵌套的Observarray(时隙)中映射数据。 当我填满我的耳环时,它工作得很好。我打赌当它嵌套时,我必须做一些特殊的事情 我是新手,所以不知道我做错了什么。 我一直在看文档,但没有结果,特别是在: 这是我的代码:(已编辑) var TimeSlot=函数(开始时间、结束时间){ var self=这个; self.startTime=startTime; self.endTime=endTime; }; var参与者=功能(id,时隙){ var self=这个; self.Na

我很难在嵌套的Observarray(时隙)中映射数据。 当我填满我的耳环时,它工作得很好。我打赌当它嵌套时,我必须做一些特殊的事情

我是新手,所以不知道我做错了什么。 我一直在看文档,但没有结果,特别是在:

这是我的代码:(已编辑)


var TimeSlot=函数(开始时间、结束时间){
var self=这个;
self.startTime=startTime;
self.endTime=endTime;
};
var参与者=功能(id,时隙){
var self=这个;
self.Name=id;
self.roomName=ko.observable();
self.timeSlots=ko.observearray();
var timeSlotVMs=u2;.map(时隙、函数(ts){
返回新的时隙(ts.startTime、ts.endTime);
});
ko.utils.arrayPushAll(self.timeSlots(),timeSlotVMs);
};
函数ViewModel(){
var self=这个;
自我参与者=ko.observearray([]);
self.addPerson=函数(){
var data='{“时隙”:[{“开始时间”:“05:23”,“结束时间”:“06:32”},
{“开始时间”:“10:23”,“结束时间”:“11:32”}]};
var partViewModel=新参与者(self.selectedValue().Id(),data.TimeSlot);
self.participants.push();
};
};
var viewModel=新的viewModel();
应用绑定(视图模型);
和HTML(如果需要):

<tbody data-bind="foreach: viewModel.participants">
    <tr>
        <td data-bind="text: Name"></td>
        <td data-bind="text: roomName"></td>

        <td data-bind="foreach: viewModel.participants.timeSlots">
                <span data-bind="text: startTime"></span>
        </td>
    </tr> 
</tbody>

试试这个:

var TimeSlot = function (startTime, endTime) {
    var self = this;
    self.startTime = startTime;
    self.endTime = endTime;
};

var Participant = function (id, timeSlots) {
    var self = this;
    self.Name = id;
    self.roomName = ko.observable();
    self.timeSlots = ko.observableArray();

    var timeSlotVMs = _.map(timeSlots, function(ts) {
        return new TimeSlot(ts.startTime, ts.endTime); 
    });
    ko.utils.arrayPushAll(self.timeSlots(), timeSlotVMs);        
};

function ViewModel() {
    var self = this;
    self.participants = ko.observableArray();

    self.addPerson = function () {
         var data = {
             TimeSlot: [
               {startTime:"05:23",endTime:"06:32"},
               {startTime:"10:23",endTime:"11:32"}
            ]
         };
         var partViewModel = new Participant(123, data.TimeSlot);
         self.participants.push(partViewModel);
    };
};
我使用库函数“map”来创建viewmodels数组。

此外,您的布局也有错误。使用时间段而不是viewModel.participants.Timeslot:

<tbody data-bind="foreach: participants">
    <tr>
        <td data-bind="text: Name"></td>
        <td data-bind="text: roomName"></td>

        <td data-bind="foreach: timeSlots">
            <span data-bind="text: startTime"></span>
        </td>
    </tr> 
</tbody>


我必须修改为var timeSlotVMs=..map(时隙,函数(ts){返回新时隙(ts.startTime,ts.endTime);}的可能重复项;为了让它运行,但是我仍然没有让它工作你能用新的代码更新你的问题吗?或者删除“viewModel.participants.timeslot”而只编写时间段。恐怕还是不行。我已经再次更新了我的答案,并为迟交的答复创建了一个工作日志。它适用于您的解决方案,谢谢。
<tbody data-bind="foreach: participants">
    <tr>
        <td data-bind="text: Name"></td>
        <td data-bind="text: roomName"></td>

        <td data-bind="foreach: timeSlots">
            <span data-bind="text: startTime"></span>
        </td>
    </tr> 
</tbody>