淘汰赛.js事件上下文

Knockout.js event context

本文关键字:上下文 事件 js 淘汰赛      更新时间:2023-09-26

>我开始使用 KNOCKOUT 重新实现一些 js 代码.js。我有一个带有一些功能的单例:

Dps = {
    someFunction: function() {
        this.anotherFunction();
    },
    anotherFunction: function() {
        console.log('tehee');
    }
}

现在还有一些绑定可以调用此单例的函数:

<input type="text" data-bind="event: { change: Dps.someFunction }" />

烦人的是,被调用函数中的上下文是事件,所以我不能调用this.anotherFunction()

有没有摆脱这种情况的好方法?

PS:我知道我可以做一些类似 Dps.someFunction() 的事情,但在我看来这并不好。

data-bind="event: { change: Dps.someFunction.bind(Dps) }"

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/bind

你的函数表现为"静态"

所以要么你必须做 Dps.otherFunction,但你不想要那个,但我不明白为什么 tbh。

你也可以调用ko.applyBindings(Dps),然后你的代码就可以正常工作了。但是,我想这也不是您要找的。可能你还有另一个视图模型,不是吗?

另一种解决方案是将 Dps 变成一个你实例化的函数

关于 jsfiddle: http://jsfiddle.net/PrbqZ/

<input type="text" data-bind="event: { change: myDps.someFunction }" />
var Dps = function() {
    var self = this;
    this.someFunction = function() {
        self.anotherFunction();
    };
    this.anotherFunction = function() {
        console.log('tehee');
    };
}
var myDps = new Dps();
//normally use dom ready, just simulating here
setTimeout(function(){
    ko.applyBindings();
}, 500)