从视图模型中的knockout的applyBindings()调用中获取关联的dom元素

时间:2012-10-09 17:53:27

标签: knockout.js

我有一个视图模型,它有各种方法可以在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();
        }
    });
}

1 个答案:

答案 0 :(得分:1)

好的,我想出了一个我很满意的自定义绑定处理程序解决方案。

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