Javascript表在飞行中

时间:2012-10-04 12:53:33

标签: javascript asp.net-mvc-3 gridview devexpress

我有一些javascript问题。这会导致一些问题。 我正在使用DevExpress MVC GridView,ASP.Net MVC 3和javascript。

这是我的问题:

我有一个gridview,例如客户。 我希望他们选择客户,并在javascript生成的表格中显示它们,这样我们就不会得到所有这些刷新。然后他们可以添加其他信息,以便将它们再次保存到另一个表中,但这并不重要。

我在从所选客户生成表格行之前执行一些计算。另一个问题是,devexpress gridview有一个事件可以调用每个选择更改而不是一个很好的~100 ms等待,这样用户可以快速多选而无需触发方法3/4次。

我通过数组跟踪我自己的表。来自DevExpress的GridView得到了他自己的事件,可以给我正确的信息,所以不必担心。 所以我得到了一个方法receiveSelectionFields(Values){//做某事}我从每个选择的gridview接收信息。 然后我检查我的数组,看看他们是否添加或删除了一个选择,以及哪个。 然后我打电话给addtablerow(客户)或者removetablerow(客户)。这将客户从我的表中删除,然后从我的数组中删除。

因为我在两者之间做了一些繁重的计算,所以在计算完成之前有一个约60ms的延迟(在我的计算机上)。因此,如果用户在60毫秒内进行2次选择。我的数组将具有错误的值(不会被添加/删除客户的第一个调用修改)并且我的javascript将导致错误,例如表行未删除。我检查自己的数组的长度和接收数组的长度,看看是否添加或删除了某些内容。

那我尝试了什么? 使我的方法成为递归方法,当问题发生时,它等待60毫秒,然后重做该方法。但这不能正常工作。

我尝试添加一个全局变量busy,当方法仍然忙时,这是真的。它结束时是假的。但是我的浏览器在这样做时就退出了。这是代码:

    while (true) {

        setTimeout(function () {
            if (busy === false) {
                break;
            }
        }, 50);
    }

但我感觉它只是无休止地循环。

这些都是解决方法,必须有一个很好的方法来解决这个问题。有什么想法吗?

简而言之: 我想要一种让函数同步的方法。即使他们被称为asynch。由用户使我的阵列不会搞砸。

找到我的问题存在的答案: 因为javascript是同步的。语言(1个主题)。这些功能应该在合适的时间触发。问题是来自DevExpress Gridview for MVC Extensions的回调。它对服务器进行回调,服务器使用选定的字段值响应例如~150ms。如果您快速触发两次devexpress功能,则会出错。第二个触发器有一个窗口返回FASTER然后返回第一个触发器。这意味着我的表格编码会被破坏,因为我检查是否添加或删除了某些内容。所以当第一个触发器(在第二个触发器之后返回)和我的表更新时。它显示了我上次选择之前的表格。因此,缺少1行或者还有1行,那么它应该是。

所以我必须创建一个检索所有事件的函数,然后在每个订单后约200毫秒的时间内放置它们。确保有足够的时间来回调回调。虽然这当然仍然不可靠,但我想我只会改变对此的要求。

1 个答案:

答案 0 :(得分:1)

你的while循环条件为true,因此循环将无休止地继续。您可能想尝试以下方法:

var int = setInterval(function () {
    if(busy === false) {
        clearInterval(int);
    }
}, 50);

尝试这样做而不是一遍又一遍地循环遍历setTimeout。如果我不得不猜测,中断是破坏if语句而不是while循环导致浏览器陷入无限循环。使用上面的代码,您可以设置运行代码的时间间隔。在这种情况下,代码每50ms运行一次。一旦if语句中的条件为真,就会清除setInterval,导致浏览器继续执行其正常功能。

希望这有帮助。