Backbone.js 主干jquery调试chrome控制台不断清除输出
我正在尝试在线学习一个简单的主干教程。问题是当我点击“post”时,tweet会发布在日志中,但会立即被清除。我不知道为什么控制台在打印出tweets.toJSON()后会自动清理。我正在使用node和livereload2在保存后加载页面。我不认为这是livereload,因为无论livereload是否运行,行为都是一样的Backbone.js 主干jquery调试chrome控制台不断清除输出,backbone.js,Backbone.js,我正在尝试在线学习一个简单的主干教程。问题是当我点击“post”时,tweet会发布在日志中,但会立即被清除。我不知道为什么控制台在打印出tweets.toJSON()后会自动清理。我正在使用node和livereload2在保存后加载页面。我不认为这是livereload,因为无论livereload是否运行,行为都是一样的 我认为,所有内容都包装在自调用匿名jquery函数中,用于范围界定。这样就不会在DOM的窗口级别公开变量 它接受JQuery变量作为$sign,因此我可以在函数中使用它
<html>
<head>
<title>Backbone Twitter App</title>
</head>
<body>
<h1> Backbone for twitter </h1>
<form id="new-tweet">
<label>Author:</label> <input id="author-name" name="author-name" type="text" />
<label>Status:</label> <input id="status-update" name="status-update" type="text" />
<button>Post</button>
</form>
<hr/>
<script type="text/javascript" src="underscore.js"></script>
<script type="text/javascript" src="jquery-1.9.0.js"></script>
<script type="text/javascript" src="backbone.js"></script>
<script type="text/javascript">
(function($) {
var Tweet = Backbone.Model.extend({
defaults:function(){
return {
author: '',
status: ''
}
}
});
var TweetsList = Backbone.Collection.extend({
model: Tweet
});
var tweets = new TweetsList();
$(document).ready(function(){
$('#new-tweet').submit(function(ev){
console.log('button pressed');
var tweet = new Tweet({author: $('#author-name').val(), status: $('#status-update').val()});
tweets.add(tweet);
console.log(tweets.toJSON());
});
});
})(jQuery);
</script>
</body>
</html>
主干推特应用程序
推特主干网
作者:
地位:
邮递
(函数($){
var Tweet=Backbone.Model.extend({
默认值:函数(){
返回{
作者:'',
状态:“”
}
}
});
var TweetsList=Backbone.Collection.extend({
型号:Tweet
});
var tweets=new TweetsList();
$(文档).ready(函数(){
$(“#新推文”).submit(函数(ev){
console.log(“按下按钮”);
var tweet=new tweet({author:$('#author name').val(),status:$('#status update').val()});
添加(tweet);
log(tweets.toJSON());
});
});
})(jQuery);
您的问题是,当您单击按钮并重新加载页面时,表单正在提交
在submit()方法中,可以调用ev.preventDefault()来停止表单的提交。是的,就是这样。非常感谢。我还有一个问题。我必须写(函数($){}(JQuery)吗?我想这会给我的变量一个局部范围。但是进一步阅读,它的目的是让我使用$而不会与其他库发生冲突。编写java代码的最佳实践是什么?就像你说的,你只需要使用(函数($){}(JQuery)当您的网站有另一个与jQuery冲突的框架时(如Prototype)。这里不是这种情况,所以您不需要使用它。至于变量范围,您在{}中声明的任何变量块保持本地。唯一的例外是当您在全局范围中声明了一个同名变量时。但是,您可以通过在{}块内使用var thevariable=18;绕过此问题。