Javascript 主干js事件内部调用查询
我这些天都在练习瑜伽。实际上,我对以下代码中的Javascript 主干js事件内部调用查询,javascript,jquery,backbone.js,Javascript,Jquery,Backbone.js,我这些天都在练习瑜伽。实际上,我对以下代码中的add和reset事件何时触发有一些疑问 我实际上在实践这一准则:http://adrianmejia.com/blog/2012/09/13/backbone-js-for-absolute-beginners-getting-started-part-2/ 代码如下: <html> <head> <link rel="stylesheet" href="http://cdnjs.cloudflare.com/
add
和reset
事件何时触发有一些疑问
我实际上在实践这一准则:http://adrianmejia.com/blog/2012/09/13/backbone-js-for-absolute-beginners-getting-started-part-2/
代码如下:
<html>
<head>
<link rel="stylesheet"
href="http://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/2.1.1/css/bootstrap.min.css">
</head>
<body>
<section id="todoapp">
<header id="header">
<h1>Todos</h1>
<input id="new-todo" placeholder="what needs to be done?" />
</header>
<section id="main">
<ul id="todo-list"></ul>
</section>
</section>
<script type="text/template" id="item-template">
<div class="view">
<input class="toggle" type="checkbox">
<label><%- description %></label>
</div>
</script>
<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 app = {};
app.Todo = Backbone.Model.extend({
defaults:{
description: '',
status:'incomplete'
}
});
app.TodoList = Backbone.Collection.extend({
model: app.Todo,
url:'api/todos'
})
app.todoList = new app.TodoList();
app.TodoView = Backbone.View.extend({
tagName: 'li',
template: _.template($('#item-template').html()),
render: function(){
this.$el.html(this.template(this.model.toJSON()));
return this;
}
})
app.AppView = Backbone.View.extend({
el: '#todoapp',
initialize: function(){
this.input = this.$('#new-todo');
this.listenTo(app.todoList,'add',this.addOne);
this.listenTo(app.todoList,'sync',this.addAll);
app.todoList.fetch();
},
events: {
'keypress #new-todo': 'createTodoOnEnter'
},
addAll: function(){
this.$('todo-list').html('');
app.todoList.forEach(this.addOne,this);
},
addOne: function(todo){
var view = new app.TodoView({model:todo});
$('#todo-list').append(view.render().el);
},
createTodoOnEnter: function(e){
if ( e.which !== 13 || !this.input.val().trim() ) { // ENTER_KEY = 13
return;
}
app.todoList.create(this.newAttributes());
},
newAttributes: function(){
return{
description: this.input.val().trim(),
status: 'incomplete'
}
}
});
var appView = new app.AppView();
</script>
</body>
</html>
场景2:
如果我在下面的代码中注释reset
事件,请刷新页面,我可以在页面上看到我的服务器数据。为什么和如何??内部发生了什么
this.listenTo(app.todoList,'add',this.addOne);
// this.listenTo(app.todoList,'reset',this.addAll);
app.todoList.fetch();
以与上述相同的方式,请将
reset
替换为sync
,输出将再次略有不同。如果有人尝试我上面的代码并自己检查输出,然后请解释事件是如何在内部调用的,我会很高兴。我已经查阅了Backbonejs.org文档中关于这些事件的内容,但是我仍然对这些事件调用行为感到困惑。这没有帮助吗@Deeptechtons:嗨,实际上我也读了你提供的链接。。但如果您能详细解释一下内部调用的事件是如何发生的,我会很高兴。仅供参考:reset
和sync
不是同一个事件<代码>同步在您将集合与服务器同步时触发,而重置
仅在调用重置
方法时触发。因此,您不能使用reset
而不是sync
,反之亦然。如果您将其放在JSFIDLE中,则会有所帮助
this.listenTo(app.todoList,'add',this.addOne);
// this.listenTo(app.todoList,'reset',this.addAll);
app.todoList.fetch();