javascript - Backbone JS View 渲染不显示

标签 javascript jquery backbone.js

<分区>

在下面的代码中,无法呈现“TodoList”。似乎获取需要时间并显示'0 ' 和 <div id=​"demo">​</div>​之前而已。

我不确定为什么 ' 3 ' 和 ' Descriptions ' 稍后显示。我只需要显示' Descriptions List ' 在页面中。我能够从服务器获取数据,但不知何故无法在数据到达后立即显示。请告诉我需要对以下代码进行哪些更改?

<html>
<head>
<link rel="stylesheet"
    href="http://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/2.1.1/css/bootstrap.min.css">
</head>

<body>

<div id="demo"></div>

<script src="http://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.7.0/underscore-min.js"></script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/backbone.js/1.1.2/backbone-min.js"></script>

<script type="text/javascript">

var TodoItem = Backbone.Model.extend({
    urlRoot: 'api',
})

var TodoCollection = Backbone.Collection.extend({
    model: TodoItem,
    url: 'api/todos'
})

var TodoView = Backbone.View.extend({
    template: _.template('<h3> ' +'<input type=checkbox ' +'<% if(status === "complete") print("checked") %>/>' +' <%= description %></h3>'),
    render: function(){
        this.$el.html(this.template(this.model.toJSON()))
    }

})

var TodoListView = Backbone.View.extend({
    initialize: function(){
        this.listenTo(this.collection,'reset',this.render)
        this.collection.fetch({reset:true})
    },
    render: function(){
        console.log(this.collection.length)
        this.collection.forEach(this.addOne,this)
    },
    addOne: function(todoItem){
        console.log(todoItem.get('description'))
        var todoView = new TodoView({model: todoItem})
        this.$el.append(todoView.render())
    }

})


var todoItem = new TodoItem()
var todoList = new TodoCollection()

var todoListView = new TodoListView({el: '#demo', collection: todoList})

todoListView.render()

console.log(todoListView.el)


</script>

</body>

</html>

这是我得到的控制台输出:

0 
<div id=​"demo">​</div>​     
3 
pick up cookies
Milk 
Cookies 

最佳答案

对于初学者,您可能想从您的提取中取出 {reset: true}。 无论如何,提取都会自动清除模型/集合。

请在命令末尾使用分号,不使用分号会让浏览器解释分号应该在哪里。这需要时间并且容易出错(浏览器可能只是将它放在您认为不会的地方)。

如果这不起作用,您可能想要将提取添加到渲染中,执行以下操作:

render: function(){

    var that = this;

    this.collection.fetch().done(function(data) {

        console.log(that.collection.length);
        that.collection.forEach(that.addOne,that);

    });

},

什么也可能有效,但你需要测试这个,我个人总是使用上面的那个:

render: function(){

    this.collection.fetch().done(function(data) {

        console.log(this.collection.length);
        this.collection.forEach(this.addOne,this);

    }, this);

},

关于javascript - Backbone JS View 渲染不显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28165789/

相关文章:

javascript - 在末尾获取 url 的最后一部分

javascript - 在 ng-repeat 中将所有先前项目的数据添加到当前项目

views - Backbone.js:导航路线时何时呈现 View

javascript - Backbone.js 路由可选参数

javascript - 如何触发 URL 与链接匹配的点击事件

javascript - 如何在 meteor 中使用 javaScript 将字符串放入粘贴缓冲区中?

jquery - 在标题中居中 DIV

javascript - jQuery 滑动一个 div

javascript - 从多个 View 中使用backbone.js中的常见默认值

javascript - 使用 Javascript v3 API 向 Google Map 添加多个点