繁体   English   中英

将计算值添加到模型声明中的可观察数组

[英]adding computed value to observable array in model declaration

我有带observableArray()的视图模型

var userTaskMyViewModel = {
    userTaskMyDetailsDTO: ko.observableArray() 
};

一旦我获得数据,我尝试使用添加一个计算函数

  $.each(userTaskMyViewModel.userTaskMyDetailsDTO(), function (index, userTask) {

                userTask.TaskCss = ko.computed(function () {
                    var result = "item-green";
                    if (userTask.Percent == 0)
                        result = "item-red";

                    return result;
                });

问题是我在获取数据之前已经应用了绑定 ,因为我需要多次从服务器获取数据并添加到此模型中。

由于我认为与TaskCss进行了数据绑定,因此出现错误,提示未定义。 我认为我在声明我的ko模型时需要声明此内容,我该怎么做? 将计算值添加到模型声明中的可观察数组。

我使用此调用来获取数据并填充模型。

$.ajax({
        url: "/api/task/gettasklist",
        type: "get",
        contentType: "application/json",
        data: { pageId: pageNumber }
    }).done(function (data) {
        if (data.length > 0) {
            for (i = 0; i < data.length; i++) {
                userTaskMyViewModel.userTaskMyDetailsDTO.push(data[i]);
            }

TaskCss添加到项目之前,将其推入可观察数组...

function addTaskCss (userTask) {
    userTask.TaskCss = ko.computed(function () {
        return (userTask.Percent === 0) ? "item-red" : "item-green";
    });
}

// ...

$.ajax(/* ... */).done(function (data) {
        if (data.length > 0) {
            for (i = 0; i < data.length; i++) {
                addTaskCss(data[i]);
                userTaskMyViewModel.userTaskMyDetailsDTO.push(data[i]);
            }

如果ajax调用返回很多项目,请考虑推送到基础数组并通知订阅者,因为这样做效率更高...

$.ajax(/* ... */).done(function (data) {
    var userTaskMyDetailArray = userTaskMyViewModel.userTaskMyDetailsDTO();
    if (data.length > 0) {
        for (i = 0; i < data.length; i++) {
            addTaskCss(data[i]);
            userTaskMyDetailArray.push(data[i]);
        }
        userTaskMyViewModel.userTaskMyDetailsDTO.valueHasMutated();

有关此技术的更多信息,请点击此处。http://www.knockmeout.net/2012/04/knockoutjs-performance-gotcha.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM