我正在尝试修改以下 knockout js 模型绑定(bind)以满足我的要求:http://jsfiddle.net/zrBuL/291/ .修改如下:
HTML:
<label>Male
<input type="radio" name="IsMale" value="a" data-bind="checked:IsMale"/>
</label>
<label>Female
<input type="radio" name="IsMale" value="b" data-bind="checked:IsMale"/>
</label>
<div data-bind="text: ABC()"/>
Javascript:
var vm = {
IsMale: ko.observable(false),
ABC:ko.purelyComputed({
read: function(){
return this.IsMale();
}
},this)
};
ko.applyBindings(vm);
对于框架,我更喜欢 knockout.js 3.0.0。
问题是它没有显示上面的 div 的任何内容,其中 div 的文本属性绑定(bind)到 ABC()。
提示:如果我在读取函数中替换以下行:
return this.IsMale();
使用以下行:
return "Hi";
然后它就像一个魅力。
我在调用属性 IsMale 时是否遗漏了什么?
最佳答案
将 purelyComputed
更改为 pureComputed
并至少升级到 Knockout 3.2.0 后,您会遇到另一个问题。
对象定义中的 this
是全局 window
对象。
因此,要获得对 vm
而不是 window
的引用,您需要为它切换到一个 function
构造函数:
function MyVM() {
this.IsMale = ko.observable(false);
this.ABC = ko.pureComputed({
read: function(){
return this.IsMale();
}
},this);
};
ko.applyBindings(new MyVM());
然后 it will work .
另一种定义方法是:
var vm = {
IsMale: ko.observable(false)
};
vm.ABC = ko.pureComputed({
read: function(){
return this.IsMale();
}
}, vm);
关于javascript - Knockout Js 计算出在模型中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31560517/