淘汰在ViewModel中创建数组 [英] Knockout create array in viewmodel

查看:131
本文介绍了淘汰在ViewModel中创建数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

另一个淘汰赛问题.

我有一个需要进行服务器端分页的页面.我想使用淘汰赛实现这一目标.

I've a page where serversided paging is desirable. I wanna achieve this using knockout.

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

I Create a viewmodel using the mapping pluging and added lots of functionality.

        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);

我首先实现了一个可计算的可观察值.但这产生了一个错误,因为未初始化'requestData'.因此更新后的变体带有'if(typeof self.requestData!='undefined')'

I've implemented a computed observable at first. But this gave an error because the 'requestData' isn't initialized. therefore the updated variant with an '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时,应该更新数组:

the array should be updated when i make a call to the 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);
            }
        }
    });
};

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

What should i do for updating the paging array on receiving new data?

亲切的问候

更新:除了我的代码外,创建pageNumber的可观察数组的最佳/最简单方法是什么?

UPDATE: Apart from my code, whats the best/easiest option to create an observable array thats depandant of the pageNumber?

推荐答案

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

Your pageNumber is an observable, but when you assign it like this:

myViewModel.requestData.settings.pageNumber = pageNumber;

您已经删除了可观察对象,并用一个简单的值替换了它.您应该像这样分配它:

you have erased the observable and replace it with a simple value. You should assign it like this:

myViewModel.requestData.settings.pageNumber(pageNumber);

这篇关于淘汰在ViewModel中创建数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆