访问ko.computed内部的局部函数

Access local function inside ko.computed

本文关键字:局部 函数 内部 ko computed 访问      更新时间:2023-09-26

为什么这行代码不能工作

我使用durandal/knockout,我的结构是这样的

define(function () {
    var vm = function() {
    compute: ko.computed(function() {
         return _compute(1); // fail
    });
    var _compute= function(e) {
        return e;
    }    
 }
 return vm;
});

基本上我只是想访问私有方法_compute -但KO.compute不允许吗?

即使我把它公开,我仍然不能访问它。我试图实现揭示模式在这一点上,但仍然没有运气!

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

update:到目前为止,只有这个有效

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 prop之前声明私有函数!

谢谢!

额外注意:

为什么需要在计算函数之前声明?我喜欢所有的"属性"在第一行,而函数在底部。

此语法在函数中不创建属性:

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观察对象。它应该包含对其他可观察对象的调用!
医生:

如果你有一个用于firstName的可观察对象,还有一个用于lastName,而您想要显示全名?这就是计算的地方这些是依赖于一个或的函数更多的其他可观察对象,并且会在任何时候自动更新