2013-08-23 112 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