2014-07-10 137 views
0

這行代碼不起作用。使用訪問ko.computed內部的本地函數

林迪朗達爾/敲除和我有這樣

define(function() { 

    var vm = function() { 

    compute: ko.computed(function() { 
     return _compute(1); // fail 
    }); 

    var _compute= function(e) { 
     return e; 
    }  
} 

return vm; 
}); 

的結構基本上我只是試圖訪問私有方法_compute - 但KO.compute犯規允許?

即使我公開,我仍然無法訪問它。 我試圖在這個實現revealing pattern,但仍然沒有運氣!

var vm = function() { 

    compute: ko.computed(function() { 
     return this._compute(1); // still failing 
    }); 

    this._compute= function(e) { 
     return e; 
    }  
} 

更新:到目前爲止,僅這一項工作

define(function() { 

    var vm = function() { 

    var self = this; 

    var self._compute= function(e) { 
     return e; 
    } 

    compute: ko.computed(function() { 
     return this._compute(1); // works 
    }, self); 

} 

,但就像我說的,_compute並不意味着被曝光。

更新:實際上是它的另一個錯誤。

這一塊現在工作

限定(函數(){

var vm = function() { 

    var self = this; 

    var _compute= function(e) { 
     return e; 
    } 

    compute: ko.computed(function() { 
     return _compute(1); // works 
    }); 

} 

基本上,只需要ko.computed道具之前聲明的私有函數!

謝謝!

附加說明:

爲什麼需要在計算函數之前聲明它?在第一行中,我更喜歡所有的「屬性」,而底部的函數則更喜歡。我覺得很整潔。

+0

請問您能否提供jsfiddle演示? –

+0

'compute:ko.computed(function(){'你正在定義一個標籤LOL –

+0

http:// jsfiddle。淨/ tarabyte/CLTBN/ –

回答

3

的功能時,該語法不創建一個屬性:

compute: ko.computed(function() { 
    return _compute(1); // fail 
}); 

你必須使用=而不是:

試試這個

var vm = function() { 
    var self = this; 
    var _compute = function(e) { 
     return e; 
    } 
    this.compute = ko.computed(function() { 
     return _compute(1); 
    });  
} 

另外請注意,這不是你應該如何使用computed觀察到。 它應該包含調用其他observables
doc

如果你已經有了 lastName的可觀察的名字,而另一個,你要顯示的全名?這就是計算出的可觀測量 - 這些函數依賴於其中一個或更多其他可觀察量,並且只要 這些依賴關係發生變化,就會自動更新

+0

已經嘗試過 - 仍然失敗! –

+0

理想情況下,我希望_compute也是私有的! –

+0

你嘗試過「自我」部分嗎? –