Javascript 如何在淘汰视图模型中处理ajax?

Javascript 如何在淘汰视图模型中处理ajax?,javascript,jquery,knockout.js,Javascript,Jquery,Knockout.js,我在我的项目中使用了knockout。我有多个viewmodel,每个viewmodel都有自己的保存功能。现在,每当用户单击save按钮将viewmodel数据发布到服务器时,我想阻止save按钮,直到服务器返回响应 目前,我通过在每个viewmodel中创建一个额外的可观察属性来处理这个问题。所以,当用户点击save按钮时,我将save observable设置为true,而在callback中,我将其设置为false。我已经使用knockout disable binding用按钮绑定了这

我在我的项目中使用了knockout。我有多个viewmodel,每个viewmodel都有自己的保存功能。现在,每当用户单击save按钮将viewmodel数据发布到服务器时,我想阻止save按钮,直到服务器返回响应

目前,我通过在每个viewmodel中创建一个额外的可观察属性来处理这个问题。所以,当用户点击save按钮时,我将save observable设置为true,而在callback中,我将其设置为false。我已经使用knockout disable binding用按钮绑定了这个保存属性

但我觉得这种方法不好,它有以下几个大缺点:

为此,我必须在每个viewmodel中添加一个额外的属性。 我必须添加多行代码,比如将其设置为true,然后再次将其设置为false。 这种方法不是集中的,这种方法的代码是分散的。 所以我想知道有没有其他更好的方法来处理这个问题,一个插件还是一些标准的方法

编辑

只是想澄清一下,我的问题与asp.net回发无关,问题是如何有效地处理ajax,如阻止保存按钮、显示响应消息等

这通常是viewmodel成为viewmodel的原因。在MVC这样的模式中,您的控制器不应该真正知道视图的外观、它有什么控件或者它的状态是什么,并且您的模型只包含视图到模型的数据。在MVVM模式中,正如knockout一样,您的viewModel实际上知道视图上控件的当前状态。这并不是说viewmodel应该直接更新视图,但它通常包含绑定到视图状态的属性。在viewmodel中可以接受诸如SaveButtonEnabled或IsSaveData之类的内容,甚至包括StatusLabelColor之类的内容。

也许可以使用$。。您可以在document ready函数中调用此函数

$.ajaxSetup({
    beforeSend: function(jqXHR) 
    {
        //this will be called before every 
        //ajax call in your program
        //so perhaps, increment an observable viewmodel variable
        //representing the number of outstanding requests
        //if this variable is > 0 then disable
        //your button
    },
    complete: function(jqXHR) 
    {
        //this will be called after every 
        //call returns
        //decrement your variable here
        //if variable is zero, then enable button
    }
}); 

我建议您看看,一个使用Knockout的框架,它有一些很棒的数据模式,即使您不直接使用它

只是澄清一下,你在做一篇ajax文章,而不是ASP.NET回发,对吗?是的,我在做ajax回发看起来就像他说他已经在使用该属性,但由于回发,它在视图模型之间不共享