Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Backbone.js 主干jquery调试chrome控制台不断清除输出_Backbone.js - Fatal编程技术网

Backbone.js 主干jquery调试chrome控制台不断清除输出

Backbone.js 主干jquery调试chrome控制台不断清除输出,backbone.js,Backbone.js,我正在尝试在线学习一个简单的主干教程。问题是当我点击“post”时,tweet会发布在日志中,但会立即被清除。我不知道为什么控制台在打印出tweets.toJSON()后会自动清理。我正在使用node和livereload2在保存后加载页面。我不认为这是livereload,因为无论livereload是否运行,行为都是一样的 我认为,所有内容都包装在自调用匿名jquery函数中,用于范围界定。这样就不会在DOM的窗口级别公开变量 它接受JQuery变量作为$sign,因此我可以在函数中使用它

我正在尝试在线学习一个简单的主干教程。问题是当我点击“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;绕过此问题。