【问题标题】:Knockout create array in viewmodel淘汰赛在视图模型中创建数组
【发布时间】:2014-01-25 18:48:59
【问题描述】:

另一个淘汰赛问题。

我有一个需要服务器分页的页面。我想通过淘汰赛来实现这一目标。

我使用映射插件创建了一个视图模型并添加了许多功能。

        var jsonModel = '@Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(this.Model, new Newtonsoft.Json.Converters.IsoDateTimeConverter()))';
        myViewModel = ko.mapping.fromJSON(jsonModel, {}, new ViewModel());
        ko.applyBindings(myViewModel);

我首先实现了一个计算的 observable。但这给出了一个错误,因为“requestData”没有被初始化。因此,更新后的变体带有 'if (typeof self.requestData != 'undefined')'

function ViewModel() {
var self = this;
//---- Return PageNumbers
self.Paging = ko.computed(function () {
    if (typeof self.requestData != 'undefined') {
        if (self.requestData.settings.pageNumber() <= 5) {
            return ko.utils.range(1, 11);
        }
        if (self.requestData.settings.pageNumber() + 5 > self.requestData.settings.nbrOfPages()) {
            return ko.utils.range(self.requestData.settings.nbrOfPages() - 11, self.requestData.settings.nbrOfPages());
        }
        return ko.utils.range(self.requestData.settings.pageNumber() - 5, self.requestData.settings.pageNumber() + 5);
    };
    return ko.utils.range(1, 11);
});

当我调用 ajaxrequest 时应该更新数组:

self.changePage = function(pageNumber) {
    self.Paging = ko.utils.range(pageNumber -1 > 0 ?)
    myViewModel.requestData.settings.pageNumber = pageNumber;
    $.ajax({
        type: "post",
        contentType: "application/json",
        url: "../Refund/FilterPageSortingChange",
        data: ko.toJSON(self.requestData),
        error: function (xhr, status, error) {
            baseShowError("Server Error", "Error changing page");
        },
        success: function (response) {
            var receivedResponse = JSON.parse(response);
            if (receivedResponse.Success) {
                ko.mapping.fromJS(receivedResponse.Result, {}, self);
            } else {
                baseShowError("Page not found", receivedResponse.message);
            }
        }
    });
};

接收新数据时如何更新分页数组?

问候

更新:除了我的代码之外,创建一个与 pageNumber 无关的可观察数组的最佳/最简单的选择是什么?

【问题讨论】:

    标签: knockout.js knockout-mapping-plugin


    【解决方案1】:

    您的 pageNumber 是可观察的,但是当您像这样分配它时:

    myViewModel.requestData.settings.pageNumber = pageNumber;
    

    你已经删除了 observable 并用一个简单的值替换它。你应该这样分配它:

    myViewModel.requestData.settings.pageNumber(pageNumber);
    

    【讨论】:

    • 好点(对不起初学者的错误)但 self.Paging 是计算依赖于 2 个 observables。但是在这些 observables 更新之后 self.Paging 不会触发更新。
    • 你所拥有的其余部分看起来不错,但可能是我忽略了的东西。你能发布一个 jsfiddle,我会帮助它工作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-31
    • 2020-12-19
    • 1970-01-01
    相关资源
    最近更新 更多