尝试使用具有相同名称的方法和属性:
作为用于访问值的属性:if (myObject.propMethod() == queryVal)
一种方法,用于分配propMethod:myObject.propMethod(newVal)
我定义了以下内容:
// the property:
myObject.propMethod = ko.observable(); // disregard the knockout 'ko' for this question
// the method:
myObject.prototype.propMethod = function (value) {
myObject.propMethod = value;
return target; // supports chaining
};
缺乏经验和对javascript的曝光:它似乎有效,但我想验证是否存在我无法解决的问题。
编辑:根据下面的评论,我的作业实际上会调用knockout的函数,所以我的“原型”永远不会被执行。如何获得允许我在分配时执行其他逻辑的结构?答案 0 :(得分:1)
您不需要单独使用属性和方法为属性赋值。
直接分配给它。
// the property:
myObject.propMethod = ko.observable();
// the method:
myObject.propMethod = value;
在这种情况下,Knockout必须使其可观察(对于双向绑定。每当你更改值时都会更新。)由于knockout使它成为一个观察方法,你必须通过put()来读取knockout observable属性。财产名称。
答案 1 :(得分:0)
Knockout observable
是它所属的ViewModel的方法;它是一个getter / setter,所以你可以按照你在第二段中描述的方式完全使用它。您无需执行任何特殊操作即可启用此行为;它是内置的。
如果您尝试独立于Knockout来实现此效果,只需创建一个getter / setter工厂函数:
function getterSetter(initVal) {
var myValue=initVal; //Closures are cool!
return function(val) {
if (typeof val !== 'undefined') {
myValue = val;
}
return myValue;
}
}
然后
var myObject = {};
myObject.propMethod = getterSetter();
myObject.anotherPropMethod = getterSetter('hello');
...
myObject.propMethod('world');
alert(myObject.anotherPropMethod()+' '+myObject.propMethod();
myObject.anotherPropMethod('goodbye');
alert(myObject.anotherPropMethod()+' '+myObject.propMethod();