我有一个HTML元素绑定到我的视图模型中使用John Resig's simple javascript inheritance构建的一个observable。
<div data-bind="with: selectedItem()">
...
<div data-bind="click: $root.save">Save changes</div>
...
</div>
我的ViewModel看起来像这样。
var ViewModel = Class.extend({
init: function(type){
this.type = type;
this.selectedItem = ko.observable({name: "My name"});
},
save: function(data){
alert(this.type);
}
});
ViewModel中的“this”保存对“selectedItem()”的引用。 换句话说,“this”引用传递给函数的“data”。 如何才能访问ViewModel的实例?
被修改
这里的目的是从ViewModel继承函数。我想分别将“this.type”作为“第一”和“第二”。
var FirstViewModel = ViewModel.extend({
init : function() {
this._super('first');
}
});
var SecondViewModel = ViewModel.extend({
init : function() {
this._super('second');
}
});
答案 0 :(得分:0)
看看这个答案,以及下面的答案: https://stackoverflow.com/a/346044/1388165
你正在点击Javascript的一个有趣部分,其中“this”指的是调用函数的对象,而不是被调用函数的父对象。这可以通过使用闭包来处理,例如下面示例中的常见=此模式。
如果你要花大量时间使用Javascript,我强烈推荐Douglas Crockford的书“Javascript:The Good Parts”,它会让你意识到很多这样的事情。我还建议观看Crockford在YouTube上的演讲(有很多)。
使用示例编辑:
var ViewModel = Class.extend({
that: {},
init: function(){
that = this;
selectedItem = ko.observable({name: "My name"});
},
save: function(data){
alert(that);
}
});
var o = new ViewModel();
o.save();