为什么这行代码不起作用。
我正在使用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不允许这样做?
即使我公之于众,我仍然无法访问它。 我试图在此实现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并不意味着暴露。
更新:实际上是另一个错误。
这个现在有效了
define(function(){
var vm = function() {
var self = this;
var _compute= function(e) {
return e;
}
compute: ko.computed(function() {
return _compute(1); // works
});
}
基本上,只需要在ko.computed prop之前声明私有函数!
谢谢!
附加说明:
为什么需要在计算函数之前声明它?我更喜欢第一行中的所有“属性”而底部的函数。我认为它更整洁。
答案 0 :(得分: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
可观察对象的方式。 它应该包含对其他可观察者的调用!
来自doc:
如果你有firstName的可观察量,而另一个有 lastName,你想显示全名吗?这是计算的地方 观察者进来 - 这些是依赖于一个或多个的功能 更多其他可观察者,并将随时自动更新 这些依赖关系会发生变化。