1

ajaxで機能するさまざまなメソッドを持つビューモデルがあります。このライブラリspin.jsを使用して、ko.applyBindings() の呼び出し中にビュー モデルが適用されたのと同じ要素にスピナーを表示したいと考えています。ビューモデル内でdom要素を取得できるKnockout.jsメソッドが表示されず、それを取得する方法があるかどうか疑問に思いました。これは何らかの形で MVVM の純粋さを超えていると確信しているので、これを行う別の方法がある場合はお知らせください。

dom 要素をパラメーターとしてビュー モデルに渡すこともできますが、これを行うにはすべてのビュー モデルで要素を追跡する必要があり、Knockout が既に追跡しているため冗長です。

// 起動スクリプト

var _paymentMethodViewModel;
$(function () {
   _paymentMethodViewModel = new ViewModels.PaymentMethodViewModel("/Customer");
   ko.applyBindings(_paymentMethodViewModel, $("#PaymentMethodsList").get(0));
   // spinner should show up over the PaymentMethodsList dom element when this is called and when the ajax call is complete it should disappear
   _paymentMethodViewModel.getAllPaymentMethods();
});

// モデルを見る

self.getAllPaymentMethods = function () {
    // ******************
    // start spinner here
    // ******************
    var spinner = new Spinner(_spinnerOpts).spin(/* <need dom element here> */);

    $.ajax({
        url: self.rootUrl + "/GetAllPaymentMethods",
        type: "POST",
        data: {},
        context: self,
        success: function (result, textStatus, jqXHR) {
        },
        error: function (jqXHR, textStatus, errorThrown) {
        },
        complete: function (jqXHR, textStatus) {
            // ******************
            // stop spinner here
            // ******************
            spinner.stop();
        }
    });
}
4

1 に答える 1

1

わかりました、私は満足しているカスタム バインディング ハンドラー ソリューションを思いつきました。

http://jsfiddle.net/StrandedPirate/UbFZT/

于 2012-10-09T21:09:09.010 に答える