如何在Backbone.js中追加后添加类?

时间:2015-10-27 15:44:04

标签: javascript jquery html css backbone.js

再次提出另一个关于我的todo-app的问题。

目前发展情况良好。现在可以添加待办事项,删除待办事项,编辑待办事项和完成'待办事项' S

您可以在此处查看结果:http://todoapp.lusenet.com/

该应用包含视图:TodoView和AppView。 AppView使用TodoView呈现应用程序。

当加载应用程序时,将调用AppView的initialize: function(){ this.input = this.$('#addTodo'); this.todoCollection = new app.TodoCollection(); // Create collection this.todoCollection.fetch({reset: true}); // Fetch items this.listenTo(this.todoCollection, 'reset', this.addAll); this.listenTo(this.todoCollection, 'add', this.addOne); } 函数。这就是那里发生的事情:

reset

所以我创建了一个新的集合,获取其中的模型,这会触发reset事件。 addAll然后调用addAll函数。

这是addAll: function(){ var i = 0, self = this; this.$('#todoList').html(''); // clean the todo list this.todoCollection.each(function(todo){ i++; setTimeout(function(){ self.addOne(todo); }, 200*i); }); } 函数:

addOne

此函数只循环遍历整个集合,并为每个模型调用addOne。这是在超时时间内完成的,因此模型会一个接一个地附加。

这是addOne: function(todo){ var view = new app.TodoView({model: todo}).render(); $(view.el).appendTo('#todoList'); } 函数:

addOne

我的麻烦开始了。 -webkit-transition: all 2000ms ease-out; -moz-transition: all 2000ms ease-out; -ms-transition: all 2000ms ease-out; -o-transition: all 2000ms ease-out; transition: all 2000ms ease-out; bottom:-2px; opacity: 0; 函数在列表中附加模型,这完全没问题。当我将这个CSS添加到模型时:

addClass

添加后隐藏模型,这就是我想要的。我想,如果我在追加后调用addOne,我可以为模型设置动画。所以我添加了一行代码来制作addOne: function(todo){ var view = new app.TodoView({model: todo}).render(); $(view.el).appendTo('#todoList'); view.$el.addClass('show'); } 函数,如下所示:

=IF(COUNT(B1:B10),SUM(B1:B10),"")

这样做,只有模特已经有了这个类'显示'当我追加它时,不会发生淡入淡出。如何在追加完成后添加类?或者我只是完全错了?

谢谢!

1 个答案:

答案 0 :(得分:1)

在添加类之前,浏览器可能没有足够的时间将元素插入到DOM中。

我尝试使用setTimeout,你真的不需要那么大的值。

addOne: function(todo){
    var view = new app.TodoView({model: todo}).render();
    view.$el.appendTo('#todoList');
    setTimeout(function(){
        view.$el.addClass('show');
    }, 40);
}

这实际上是一个众所周知的技巧,some people even call it with 0 timeout