我不知道是否可能,但我想实现这样的目标:
function templateCheck(Properties,ComputedFunction){
var self = this;
self.Prop1 = ko.observable(Properties.Prop1);
self.CustomCaltulation = ko.computed(ComputedFunction);
return {
returningValue: self.CustomCalculation
}
}
// This doesn't work
var test = new templateCheck({Prop1: "something"},function(){ return self.Prop1(); })
// Error: TypeError: Object [object global] has no method 'Prop1'
到目前为止,我没有成功实现这一目标。
答案 0 :(得分:2)
不需要'自我'变量。它实际上让你变得更难,因为你发现,'self'不是在templateCheck的上下文之外定义的。诀窍是使用计算变量的'owner'属性,它设置this
function templateCheck(Properties, ComputedFunction){
this.Prop1 = ko.observable(Properties.Prop1);
this.CustomCalculation = ko.computed({
read: ComputedFunction,
owner: this
});
return {
returningValue: this.CustomCalculation
};
}
var test = new templateCheck({Prop1: "something"},function(){ return this.Prop1(); })
我确实想知道你为什么要这样做。感觉有点像代码味道给我。也许有更好的方法?
答案 1 :(得分:0)
您的问题是您的函数上下文中未定义自变量。
function templateCheck(Properties){
var self = this;
self.Prop1 = ko.observable(Properties.Prop1);
self.setComputedFunction(computedFunction) {
self.customCalculation = ko.computed(computedFunction);
}
}
var template = new templateCheck({Prop1: "something"});
var myComputedFunction = function(){ return template.Prop1(); };
template.setComputedFunction(myComputedFunction);
var test=template.customCalculation;
答案 2 :(得分:0)
您已撰写self.CustomCaltulation
而不是self.CustomCalculation
。这可能不是您的问题,但很快我就会发现您的问题。