簡體   English   中英

Knockout Js計算出不在模型中工作

[英]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屬性時我有什么遺漏的嗎?

我認為問題在於兩件事:

  1. 沒有purelyComputed ,它是pureComputed

  2. 也是在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM