You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Backbone.js中LeaderboardDeetsView视图未初始化问题修复求助

Backbone.js视图未初始化&数据获取失败问题修正

问题描述

我开发了一个简单的Backbone.js应用,从MySQL数据库获取用户数据,需在LeaderboardDeetsView视图中展示,目标是将数据填充到id为bbcontent的div中。但该视图未被调用,其initialize方法内的collection fetch操作也未执行,请求修正代码。

原HTML代码

<body>
<div id="container"></div>
<h1>Leaderboard</h1>
<table class="table" id="modtable">
  <tr>
     <th>Username</th>
     <th>Level</th>
  </tr>
 </table>
 <div id="bbcontent"></div>
</body>

原Backbone代码

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"> 
</script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/backbone.js/1.2.3/backbone-min.js"> 
</script>

<script language="javascript">
  $(document).ready(function() {
     alert("heyyyyyy")
     //model
     var User = Backbone.Model.extend({
        idAttribute: "userId",
        defaults: {
           username: null,
           userLevel: null
        }
     });

     //collection
     var Users = Backbone.Collection.extend({
        model: User,
        url: "/CW2/ASSWDCW2/cw2app/index.php/Leaderboard/leaderboard",
     });

     var usersC = new Users();

     var LeaderboardDeetsView = Backbone.View.extend({
        model: usersC,
        el: $('#bbcontent'),
        intialize: function() {
           alert("asndasnxdjksa")
           usersC.fetch({
              async: false
           })
           this.render()
        },
        render: function() {
           var self = this;
           usersC.each(function(c) {
              var block = "<div class='name'><h1>" + c.get('username') + "</h1></div>"
              self.$el.append(block)
           })
        }
     })

     var leaderboardDeetsView = new LeaderboardDeetsView();
  });
</script>

错误分析与修正方案

  • 核心拼写错误:视图初始化方法initialize被误写成intialize,导致初始化逻辑完全无法触发,这是视图没被调用的根本原因。
  • 视图属性错误:关联集合应使用collection属性而非model,原代码将集合赋值给model,不符合Backbone的视图-数据关联规范。
  • 同步请求问题:async: false会阻塞浏览器主线程,属于不推荐的写法,改用异步回调监听fetch完成事件更合理。
  • 渲染时机问题:原代码直接在fetch后调用render,未考虑请求失败或数据未加载完成的情况,通过监听集合的sync事件触发渲染更可靠。

修正后的完整代码

HTML部分(无修改)

<body>
<div id="container"></div>
<h1>Leaderboard</h1>
<table class="table" id="modtable">
  <tr>
     <th>Username</th>
     <th>Level</th>
  </tr>
 </table>
 <div id="bbcontent"></div>
</body>

Backbone JavaScript部分

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"> 
</script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/backbone.js/1.2.3/backbone-min.js"> 
</script>

<script language="javascript">
  $(document).ready(function() {
     alert("heyyyyyy")
     // Model定义
     var User = Backbone.Model.extend({
        idAttribute: "userId",
        defaults: {
           username: null,
           userLevel: null
        }
     });

     // Collection定义
     var Users = Backbone.Collection.extend({
        model: User,
        url: "/CW2/ASSWDCW2/cw2app/index.php/Leaderboard/leaderboard"
     });

     var usersC = new Users();

     // 视图定义
     var LeaderboardDeetsView = Backbone.View.extend({
        // 关联集合而非model
        collection: usersC,
        el: $('#bbcontent'),
        // 修正拼写错误
        initialize: function() {
           alert("asndasnxdjksa")
           // 监听集合同步事件,确保数据加载完成后渲染
           this.listenTo(this.collection, 'sync', this.render);
           // 异步fetch,避免阻塞
           this.collection.fetch({
              error: function() {
                 alert("数据加载失败")
              }
           })
        },
        render: function() {
           var self = this;
           // 清空容器后再渲染,避免重复添加
           self.$el.empty();
           this.collection.each(function(c) {
              var block = "<div class='name'><h1>" + c.get('username') + "</h1></div>"
              self.$el.append(block)
           })
           return this;
        }
     })

     // 实例化视图
     var leaderboardDeetsView = new LeaderboardDeetsView();
  });
</script>

内容的提问来源于stack exchange,提问作者Kavishka Rajapakshe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 17:00:11