[英]Knockout Js computed not working in a model
我試圖修改以下knockout js模型綁定以符合我的要求: 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的文本屬性綁定到ABC()上面的div顯示任何內容。
提示:如果我在讀取功能中替換以下行:
return this.IsMale();
使用以下行:
return "Hi";
然后它就像一個魅力。
在調用IsMale屬性時我有什么遺漏的嗎?
我認為問題在於兩件事:
沒有purelyComputed
,它是pureComputed
也是在Knockout 3.2.0中引入的pureComputed
,因此您需要升級到該版本才能使用它。
將purelyComputed
更改為pureComputed
並升級到至少Knockout 3.2.0后,您會遇到另一個問題。 this
在一個對象定義為全局window
對象。
因此,要獲得對vm
而不是window
的引用,您需要切換到它的function
構造function
:
function MyVM() {
this.IsMale = ko.observable(false);
this.ABC = ko.pureComputed({
read: function(){
return this.IsMale();
}
},this);
};
ko.applyBindings(new MyVM());
然后它會工作 。
另一種定義方法是:
var vm = {
IsMale: ko.observable(false)
};
vm.ABC = ko.pureComputed({
read: function(){
return this.IsMale();
}
}, vm);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.