2013-08-23 70 views
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没有正确捕捉渣油为我的资源,所以我最终喜欢/图片/未定义的URL。

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

小号

+0

1.目前尚不清楚,你怎么骂'updateViewModel()'函数(什么对象这个指的是?)。 2.无论如何,你的'计算'将不会奏效,因为它没有订阅'ResID',而且它是'可观察'的。 – ataman

+0

因此,请向我们展示完整的模型代码,其中包含ResID以及您调用'updateViewModel()'的代码。 – ataman

回答

0

当你实现一个ko.computed观察到的,它只是创造了那些在计算函数内引用可观的依赖。请记住,必须通过执行observables来引用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); 
+0

那么,如何让ResID可观察?这是我的观点模型的一部分。 – serlingpa

+0

我并不确切知道你的代码是什么样的,但我认为ResID来自服务器并通过映射插件添加到视图模型中。如果是这种情况,可能需要手动将数据结果映射到视图模型'this.resId = ko.observable()'上预定义的可观察字段,或者您可能需要配置映射插件以创建可观察对象代表你。 –

+0

我真的很想使用this.ResID = ko.observable(),但我不确定在哪里放置或应该放在括号内!我试图把它放在LiveStatusViewModel()构造函数中,但没有效果,可能是因为我错过了括号中的内容。是的你是对的,我正在使用映射插件获取视图模型。 – serlingpa