1

以下のマークアップでは、while ループは、ページが更新されたとき (ポストバック) に機能します。つまり、while ループの呼び出しが機能しています。ただし、更新しないと更新されません (つまり、データベースの値を更新しても、Web ページに変更が表示されません)。常にデータを取得したい。

なぜそうしないのですか?修正は何ですか?

マークアップ

<!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 に答える