0

私は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()のようなことができることは知っていますが、これは私の意見では良くありません。

4

2 に答える 2

1

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

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

于 2012-06-02T10:43:17.967 に答える
1

関数は「静的」として動作します

したがって、Dps.anotherFunction を実行する必要がありますが、それは望ましくありませんが、理由がわかりません。

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)
于 2012-06-02T11:39:31.160 に答える