我有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]);
}
答案 0 :(得分:0)
将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