1

わかりましたので、私のビューモデルでは、次のような関数を作成することがよくあります

self.updateSomething = function(data, event){

    var theElem = $(event.target); 

    //do stuff with the elem

}

それはうまくいきます、問題はありません。私が抱えている問題は、関数にも値を渡したいということです。

self.updateSomething = function(myVar, data, event){

    var theElem = $(event.target); 

    //do stuff with the theElem AND myVar

}

しかし、これはうまくいきません。それはとても単純に思えますが、それは単なる構文の問題だと確信していますが、理解できず、GOogle は私を失敗させています。私に骨を投げつけたい人はいますか?ありがとう!

4

1 に答える 1

3

.bind機能を使用しようとしましたか?

たとえば、.html

<span data-bind="text: test, click: updateSomething.bind($data,'a variable','another variable') "></span>

そしてあなたのビューモデルで:

var vm = function () {
    var self = this;
    self.test = ko.observable('ciao');

    self.updateSomething = function (myVar1, myVar2, data, event) {

        var theElem = $(event.target);

        //do stuff with the theElem AND myVar

    }
}

また、カスタム バインディング ハンドラーを使用する別の方法もお勧めします。

あなたのhtmlで:

  <span data-bind="myHandler : {var1:'variable1', var2:'variable2'}"></span>

あなたのjsファイルで:

ko.bindingHandlers.myHandler =   {

    update: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
        var theElem = $(element);
        var variables =valueAccessor();
        var var1 =  variables.var1;

    }
}

この 2 番目のアプローチでは、より読みやすく再利用可能なコードを作成できます。また、個人的には、懸念事項をより適切に分離するために、DOM ( $(...)) へのすべてのアクセスをカスタム バインディング ハンドラーに残すことを好みます。ここに例があります: jsfiddle

于 2013-04-15T08:39:19.570 に答える