我知道在使用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小提琴在这里: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小提琴在这里:http://jsfiddle.net/vvdo7z70/10/
用object.prototype语法传递相关的ko绑定是不可能的吗?还是有别的办法呢?
发布于 2015-08-31 09:08:11
首先,Foo.prototype.capitalizer中没有定义self。一旦解决了这个问题,您需要注意绑定click: whatever.capitalizer使用的是函数,而不是方法,也就是说,没有提供whatever上下文。取而代之的是,提供vm作为上下文。这将会起作用:
Foo.prototype.capitalizer = function () {
this.whatever.bar("Bar");
};或
click: whatever.capitalizer.bind(whatever)https://stackoverflow.com/questions/32302329
复制相似问题