3

Backbone.js で基本的なタスクを実行しようとしていますが、うまくいきません。モデルでフェッチ操作を実行し、ビューを更新したいだけです。これが私のコードです:

(function($) {
    var HomeModel = Backbone.Model.extend({
        defaults: {
            lead: "not logged in",
        },
        url: 'test.php'
    });

    var HomeView = Backbone.View.extend({
        initialize: function() {
            this.model = new HomeModel();
            this.model.bind("change", this.render);
            this.model.fetch();
        },

        el: $("#content"),

        render: function() {
            this.$el.html(this.model.get("lead"));
        }
    });

    var homeView = new HomeView();
})(jQuery);

"test.php" が正常に読み込まれていることは確認できますが、render関数は呼び出されません。

私は何が欠けていますか?

4

2 に答える 2

3

「test.php」が正常にロードされたことをどのように確認しましたか? AJAX リクエストは成功しても、レスポンスが有効な JSON ではないということはありませんか? fetch 呼び出しに成功とエラーのコールバックを追加してみてください。this.model.fetch({success: function (resp) { console.log('success: %o', resp) }, error: function (er) { console.log('error: %o', er) });

于 2012-05-29T00:27:14.053 に答える
2

私は正しい答えを持っていると思います。関数で参照しthisていますrenderが、コンテキストthisはイベントであり、クラスではありません。したがって、アンダースコアのbindAll関数を使用して、クラスを関数の内部にバインドする必要があります。そのようです:

var HomeView = Backbone.View.extend({
    initialize: function() {
        _.bindAll(this, 'render'); // bind 'this' in 'render'
        this.model = new HomeModel();
        this.model.bind("change", this.render);
        this.model.fetch();
    },
});

そうでなければ this.el は存在しないか、少なくとも間違っていて、静かに失敗します。

于 2012-05-28T23:50:35.300 に答える