我的淘汰赛实施有问题。我是淘汰赛的新手,所以会很感激帮助。
我有以下代码:
function updateViewModel() {
if (typeof groupId == 'undefined') {
groupId = getDefaultGroupId();
}
$.getJSON("api/livestatusgroup/children/" + groupId)
.done(function (data) {
ko.mapping.fromJS(data, liveStatusViewModel.groups);
groupsLoaded();
});
$.getJSON("api/livestatusgroup/resources/" + groupId)
.done(function(data) {
ko.mapping.fromJS(data, liveStatusViewModel.resources);
resourcesLoaded();
});
this.resourceImagePath = ko.computed(function () {
return "../Image/" + this.ResID;
}, this);
}
function ViewModel() {
var self = this;
self.resources = ko.mapping.fromJS([]);
self.groups = ko.mapping.fromJS([]);
}
var vm = new ViewModel();
ko.applyBindings(vm);
不幸的是,计算出的observable函数resourceImagePath没有正确捕获我的资源的ResID,所以我最终得到了像/ Image / undefined这样的URL。
我错过了什么?我已经检查过,ResID字段肯定存在于视图模型中。
S
答案 0 :(得分:0)
实现ko.computed
observable时,它只为在计算函数中引用的observable创建依赖项。请记住,必须通过执行它们来引用observable,因为它们是函数 - 这是允许计算函数检测和跟踪依赖关系的动作。
否则,计算函数只能使用首次执行计算函数时可用的值。
此代码引用this.ResID
,但由于未将ResID视为可观察对象,因此对其没有任何依赖性。
this.resourceImagePath = ko.computed(function () {
return "../Image/" + this.ResID;
}, this);
尝试确保this.ResID
实际上是一个可观察的,并添加如下括号:
this.resourceImagePath = ko.computed(function () {
return "../Image/" + this.ResID();
}, this);