Knockout数据绑定范围变量“this”

时间:2012-05-18 20:47:43

标签: javascript inheritance knockout.js

我有一个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');
    }
});

1 个答案:

答案 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();