1

私は混乱していて、助けを借りることができます。

私はレンダリング関数の中にいて、次の3つのデバッグ行があります。

            console.debug(this.model);
            foo = this.model.toJSON();
            console.debug(foo);

最初の行の出力は、サーバーからフェッチされたデータを含むモデルインスタンスであり、attributesプロパティには私が期待するものが入力されています。

ただし、2番目のconsole.debug呼び出しには空のオブジェクトが含まれています。

何が得られますか?デバッグ出力のこの2番目のビットには、同じ属性が含まれている必要がありますが、JSON化されていますか?

以下はコードの完全なビットです:

    function get_race() {

    var RaceModel = Backbone.Model.extend({
        urlRoot: api_root + 'race/1/?format=json',

    });

    var RaceView = Backbone.View.extend({
        template: _.template('<h1>a template</h1><h2>desc: <%= year %></h2>'),
        initialize: function() {
            this.model = new RaceModel();
            this.model.fetch();
            this.render();
        },
        render: function() {
            console.debug(this.model);
            foo = this.model.toJSON();
            console.debug(foo);
            this.$el.html(this.template(this.model));
            return this;
        }
    });


    var race_view = new RaceView({ el: $("#backbone_test") });
4

3 に答える 3

0

取得コードを次のように変更します。

that = this
this.model.fetch(
    success: function () { 
        that.render();
);
于 2013-02-24T08:01:30.300 に答える
0

ログの結果に騙されている可能性が高いです。オブジェクトが正しい値でログに記録されるのは、console.log() がログに記録されたオブジェクトへの参照を保持しているためです。これは、次の HTML ページを使用して Chrome で確認できます。

<!doctype html>
<html lang="en">
<head>
<script type="text/javascript">
    var object = { title: null };
    console.log(object);
    function update() { object.title = document.getElementById("title").value; }
</script>
</head>
<body>
    <input id="title" type="text" value="New title"/><br/>
    <button onclick="update()">Update title</button>
</body>
</html>
  1. 開発者ツールを読み込まずに、Chrome でページを読み込みます。
  2. JavaScript コンソールを開き、ログに記録されたインスタンスの値が null であることを確認します。
  3. JavaScript コンソールを閉じます。
  4. ボタンをクリックして、タイトルを更新します。
  5. JavaScript コンソールを再度開きます。同じログ行であっても、タイトルが新しい値で更新されるようになりました。

ビューをレンダリングする前に値がロードされていることを確認するには、結果を待つ必要があります。個人的には、nEEbz ソリューションを使用します。

于 2013-02-24T16:11:17.733 に答える