【问题标题】:ASP.net MVC/Knockout JS Mapping - Can't update ViewModelASP.net MVC/Knockout JS 映射 - 无法更新 ViewModel
【发布时间】:2015-01-17 01:13:17
【问题描述】:

这看起来很简单,但我是 Knockout JS 的新手。按照一堆教程,我想出了这个:

// Create view model
        var viewModel = function () {
            var self = this;
            self.master = ko.mapping.fromJS(@Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(Model)));
            self.total_results = ko.observable(self.master.totalRecordCount());
            self.pager = ko.pager(self.total_results);
            self.pager().CurrentPage.subscribe(function () {
                self.search();
            })
            self.search = function () {
                $.ajax({
                    type: "GET",
                    url: "/api/get?data=1&start_index=" + self.pager().FirstItemIndex() + "&end_index=" + self.pager().LastItemIndex() + "",
                }).done(function (pagedData) {
                    // Map model; create pager
                   ko.mapping.fromJS(pagedData, self.master);
                   //self.total_results(self.master.totalRecordCount());
                }).error(function (ex) {
                    alert("Error");
                });
            }
        }

        $(function () {
            // Apply
            ko.applyBindings(viewModel);
        });

当我单击分页按钮时,搜索方法会运行并获取新数据。当我更新 ViewModel 时……什么也没有发生。任何想法为什么会这样?

【问题讨论】:

    标签: javascript asp.net-mvc-4 knockout.js knockout-mapping-plugin


    【解决方案1】:

    您想更新self.master 的内容,而不是覆盖它。因此,将done 回调中的那一行更改为:

    // Map model; create pager
    ko.mapping.fromJS(pagedData, self.master);
    

    【讨论】:

    • 可能还有其他问题,但你肯定需要修复这部分。
    • 我也对问题中的代码进行了更改。还是什么都没有。
    【解决方案2】:

    我觉得自己很笨,但这就是问题的全部:

    var viewModel = function () {
                var self = this;
                self.master = ko.mapping.fromJS(@Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(Model)));
                self.pager = ko.pager(ko.observable(self.master.totalRecordCount()));
    
                self.pager().CurrentPage.subscribe(function () {
                    self.search();
                });
    
                self.search = function () {
                    $.ajax({
                        type: "GET",
                        url: "/api/get?data=1&start_index=" + self.pager().FirstItemIndex() + "&end_index=" + self.pager().LastItemIndex() + "",
                        success: function (obj) {
                            ko.mapping.fromJS(obj, self.master);
                        }
                    });
                }
            }
    
            $(document).ready(function () {
                ko.applyBindings(new viewModel());
            });
    

    由于我在应用绑定时没有抓取“新”视图模型,因此不会发生任何事情。呸!

    【讨论】:

      猜你喜欢
      • 2014-04-12
      • 1970-01-01
      • 2012-12-18
      • 2013-01-10
      • 2018-12-11
      • 1970-01-01
      • 2012-12-26
      • 2014-09-23
      • 1970-01-01
      相关资源
      最近更新 更多