1

在下面的标记上——当页面刷新时,while 循环工作,即(回发)——即 while 循环中的调用正在运行。但是,它不会在没有刷新的情况下更新(即,如果我更新数据库中的值,我不会在网页上看到更改)。我希望它不断地获取数据。

为什么不呢?解决方法是什么?

标记

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>TestPage</title>
<script type="text/javascript" src="js/jquery-1.9.1.js"></script>
<script type="text/javascript" src="js/data-import.js"></script>
<script src="js/underscore-min.js"></script>
<script src="js/backbone-min.js"></script>
<script src="js/jquery.dateFormat-1.0.js"></script>
</head>
<body>
    <div id="container">
        <div id="header">
        </div>
                <div id="tabContent">
                    <div id="fileRepositoryTable">
                        <h2 id="dataImportHeader">File Management</h2>
                        <table width="100%">
                            <tr>
                                <td>
                                    <div id="fileRepository">
                                        <script type="text/template" id="fileRepository-template">
                                                <div id="fileRepositoryTable">

                    <h2 id="dataImportHeader">File Management</h2>
                    <table width="100%">
                        <tr>
                            <td>
                                <div id="fileRepository">
                                    <script type="text/template" id="fileRepository-template">
                        <table id = "fileRepositoryTable">
                            <thead>
                                <tr>
                                    <th>File Name</th>
                                    <th>Progress</th>
                                    <th>Time Imported</th>
                                </tr>
                            </thead>
                        <tbody>

                        </tbody>
                        </table>
                        </script>
                        <script type="text/template" id="fileRepositoryrow-template">
                        <td><%= get('fileName')%></td>
                        <td><%= get('progress') +" %"%></td>
                        <td><%= $.format.date(get('timeImported'), 'dd/MM/yyyy hh:mm:ss') %></td>
                        </script>
                        </div>
                        </td>
                        </tr>
                    </table>
                    </div>

*骨干代码 *

DataImport.FileRepositoryView = Backbone.View.extend({


    el: '#fileRepository',
    template: _.template($('#fileRepository-template').html()),

      initialize: function () {
        _.bindAll(this, 'render', 'appendRow');
        this.collection.bind('reset', this.render);
      },

      appendRow: function (fileRepo) {
        var repositoryView = new DataImport.FileRepositoryRowView({model: fileRepo});
        this.$el.find('tbody').append(repositoryView.render().el);
        return this;
      },

      render: function () {
        this.$el.html('');
        this.$el.append(this.template(this));
        _(this.collection.models).forEach(this.appendRow, this);
        return this;
      }
});

DataImport.FileRepositoryRowView = Backbone.View.extend({

     tagName: 'tr',
      template: _.template($('#fileRepositoryrow-template').html()),

      initialize: function () {
        _.bindAll(this, 'render');
        this.render();
      },

      render: function () {
        this.$el.html(this.template(this.model));
        return this;
      }
});

DataImport.FileRepositoryRows = Backbone.Collection.extend({

    model: DataImport.Row,
    url: DataImport.rootURL + 'path/getFileRepository',

});

*编辑包括主干代码 *

4

2 回答 2

3

代替

while (true) {}

尝试

setInterval(function() {
    // update code here
}, 0);

否则,由于 JS 一直在使用 CPU,您的浏览器不会更新页面。

如果你不得不使用

while (whatever) {}

在很长一段时间内,您应该很想使用

var clock = setInterval(function() {
    // the code to repeat
    if (!whatever) {
        clearInterval(clock);
    }
}, 0);

而是让浏览器保持响应。

于 2013-04-13T12:11:26.633 回答
0

解决了:

在我的 document.ready 函数中:

setInterval(function() {
            DataImport.FileRepositoryRowList.fetch();
            }, 10000);

感谢小伙伴们的帮助。

于 2013-04-13T13:20:46.823 回答