我理解在使用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绑定?还是有其他办法吗?
答案 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}}