0

我有一个具有 BatchHistoryViewModel 类型的 knockoutObservableArray 的视图模型

它正在使用以下映射选项在构造函数中成功创建

var mappingOptions = {
            'batchHistories': {
                create: function (options) {
                    return new BatchHistoryViewModel(options.data, dataContext);
                },
                key: function (batchHistory) {
                    return ko.utils.unwrapObservable(batchHistory.Id);
                }
            }

效果很好,并且可观察数组在 DOM 上的表中正确显示

现在,当我尝试运行更新函数以从同一源获取相同的数据时,它不会更新 DOM 我可以在控制台中观察 observable 并看到它正在使用正确的数据进行更新,但它没有页面更新

这是我的刷新功能

    refresh() {
        var self = this;

        $.when(self.dataContext.getBatchHistories(0, "Any"))
            .done(function (refreshedData) {
                var mappingOptions = {
                    'batchHistories': {
                        create: function (options) {
                            return new BatchHistoryViewModel(options.data, null);
                        },
                        key: function (batchHistory) {
                            return ko.utils.unwrapObservable(batchHistory.Id);
                        }
                    }
                };

                self = ko.mapping.fromJS(refreshedData, mappingOptions);

这是 .net MVC 控制器返回的内容

        var batchHistories =
            new
            {
                batchHistories =
                    this.consoleRepository.GetBatchHistories(fromDate, status).ToList()
                        .Select(batchHistory => new
                                                {
                                                    Id = batchHistory.Id,
                                                                            DataMartName = batchHistory.DataMartName,
                                                                            Name = batchHistory.Name,
                                                                            LoadType = batchHistory.LoadType,
                                                                            BatchDefinitionId = batchHistory.BatchDefinitionId,
                                                                            SsisExecutionId = batchHistory.SsisExecutionId,
                                                                            StatusId = batchHistory.StatusId,
                                                                            Status = batchHistory.Status.Status,
                                                                            StartDateTime = batchHistory.StartDateTime.SafeToString(),
                                                                            EndDateTime = batchHistory.EndDateTime.SafeToString(),
                                                })
                        .ToList()
            };


        return this.Json(batchHistories, JsonRequestBehavior.AllowGet);

我已经尝试过使用或不使用 fromJS 上的映射选项,我得到了相同的结果。

有任何想法吗?请询问更多代码是否有帮助。除非需要,否则我不想让问题过多。谢谢!

4

1 回答 1

0

我做错了这是应用映射的正确方法

 ko.mapping.fromJS(refreshedData, self );
于 2013-09-23T14:59:03.087 回答