javascript - Knockout Js 计算出在模型中不起作用

标签 javascript jquery html knockout.js

我正在尝试修改以下 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/

相关文章:

javascript - Jquery UI,自动完成,尝试以表单提交选定的答案

jquery - FullCalendar "view"可缓存

jquery - 单击图像时在 Colorbox 中加载 iframe

javascript - 从表格中获取表格中的输入值

html - Bootstrap 3,两个侧边栏导航菜单

javascript - 使用 iPhone 时网站出现水平滚动

javascript - 试验node-webkit : node-odbc fails

php - 浏览器忽略来自 ajax 响应的 header 刷新

javascript - 填充 Meteor 中的下拉列表

javascript - 如何使其他 javascript 文件可以使用函数?