Javascript 敲除中的计算可观测函数

Javascript 敲除中的计算可观测函数,javascript,model-view-controller,knockout.js,Javascript,Model View Controller,Knockout.js,我的击倒实现有问题。我是个新手,所以非常感谢你的帮助 我有以下代码: function updateViewModel() { if (typeof groupId == 'undefined') { groupId = getDefaultGroupId(); } $.getJSON("api/livestatusgroup/children/" + groupId) .done(func

我的击倒实现有问题。我是个新手,所以非常感谢你的帮助

我有以下代码:

    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字段


S

当您实现一个
ko.computed
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);

1.现在还不清楚,如何调用
updateViewModel()
函数(此引用的对象是什么?)。2.无论如何,你的
计算的
不会以这种方式工作,因为它没有订阅
ResID
,请考虑它是否是可观察的。因此,请向我们展示模型的完整代码,包含ResID,以及你调用
updateViewModel()
的代码。那么如何使ResID可观察?它是我的视图模型的一部分。我不知道你的代码到底是什么样子的,但我假设ResID来自服务器,并通过映射插件添加到你的视图模型中。如果是这种情况,您可能需要手动将数据结果映射到视图模型上预定义的可观察字段中,或者您可能需要配置映射插件来代表您创建可观察。我真的很想使用this.resId=ko.observable(),但我不知道该把这个放在哪里,或者括号里应该放什么!我尝试将其放入LiveStatusViewModel()构造函数中,但没有效果,可能是因为我缺少括号中的内容。是的,你是对的,我正在使用映射插件获取视图模型。