0

簡単なバックボーン チュートリアルをオンラインで実行しようとしています。問題は、「投稿」をクリックすると、ツイートがログに投稿されますが、すぐにクリアされることです。tweets.toJSON() を出力した直後にコンソールがクリーンアップする理由がわかりません。node と livereload2 を使用して、保存後にページをロードしています。livereload が実行されているかどうかに関係なく、動作は同じであるため、livereload ではないと思います。

  1. すべてが、スコーピングのために自己呼び出しの匿名jquery関数にラップされていると思います。変数が DOM のウィンドウ レベルで公開されないようにします。
  2. $ 記号として JQuery 変数を受け取るので、関数内で使用できます。

私はこれを正しく読んでいますか?

お手伝いありがとう !。

<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>
4

1 に答える 1

0

あなたの問題は、ボタンをクリックするとフォームが送信され、ページがリロードされることです。

submit() メソッドでは、ev.preventDefault() を呼び出して、フォームの送信を停止できます。

于 2013-02-11T02:17:59.433 に答える