当使用对象原型定义函数时,无法修改ko observable

时间:2015-08-30 23:53:26

标签: javascript knockout.js

我理解在使用knockout时使用object.prototype.whatever语法修改原型通常是不好的做法,但我试图理解为什么这根本不起作用:

var Foo = function() {
        var self = this;
        self.bar = ko.observable("bar");
    };
    Foo.prototype.capitalizer = function() {
        self.bar("Bar");
    };
    var vm = function() { 
        var self = this;
        self.whatever = new Foo();
    };

js fiddle here:http://jsfiddle.net/vvdo7z70/8/

当这按预期工作时:

var Foo = function() {
        var self = this;
        self.bar = ko.observable("bar");
        self.capitalizer = function() {
            self.bar("Bar");
        }
    };
    var vm = function() { 
        var self = this;
        self.whatever = new Foo();
    };

js fiddle here:http://jsfiddle.net/vvdo7z70/10/

是否无法使用object.prototype语法传递相关的ko绑定?还是有其他办法吗?

1 个答案:

答案 0 :(得分:0)

首先,self中未Foo.prototype.capitalizer定义click: whatever.capitalizer。修复后,您需要注意绑定whatever正在使用函数,而不是方法,也就是说,未提供vm上下文。而是提供Foo.prototype.capitalizer = function () { this.whatever.bar("Bar"); }; 作为上下文。这将有效:

click: whatever.capitalizer.bind(whatever)

{{1}}