[英]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.