0

我的淘汰赛实施有问题。我是淘汰赛的新手,因此将不胜感激。

我有以下代码:

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

不幸的是,计算出的可观察函数 resourceImagePath 没有正确捕获我的资源的 ResID,所以我最终得到了 /Image/undefined 之类的 url。

我错过了什么?我已经检查过了,ResID 字段肯定存在于视图模型中。

小号

4

1 回答 1

0

当你实现一个ko.computedobservable 时,它​​只会为计算函数中引用的 observable 创建一个依赖项。请记住,observables 必须通过执行它们来引用,因为它们是函数——正是这个动作允许计算函数检测和跟踪依赖关系。

否则,计算函数将只能使用首次执行计算函数时可用的值。

此代码引用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);
于 2013-08-23T11:26:04.600 回答