繁体   English   中英

计算出的可观察到的功能

[英]Computed observable function in knockout

我的淘汰赛实施有问题。 我是淘汰赛的新手,将感谢您的帮助。

我有以下代码:

    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字段在视图模型中肯定存在。

小号

当您实现ko.computed observable时,只会为在计算函数中引用的observables创建依赖项。 请记住,可观察对象必须通过执行它们来引用,因为它们是函数-正是此操作允许计算函数检测并跟踪依赖项。

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

这段代码引用了this.ResID ,但由于没有将ResID视为可观察this.ResID ,因此对此没有任何依赖性。

 this.resourceImagePath = ko.computed(function () {
        return "../Image/" + this.ResID;
    }, this);

尝试确保this.ResID实际上是可观察的,并添加如下括号:

 this.resourceImagePath = ko.computed(function () {
        return "../Image/" + this.ResID();
    }, this);

暂无
暂无

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

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