2

この例では、new キーワードが、使用されている Router クラスの一意のインスタンスを作成しないのはなぜですか? 私の単純なルーターには解決される $deferred プロパティがあることがわかりますが、新しいクラスを作成して状態を再度テストしても、新しいクラスが作成されたときに「保留中」にリセットされるのではなく、解決されます。

var Router = Backbone.Router.extend({

    $deferred: new $.Deferred(),
    initialize: function () {

    }

});

var router1 = new Router({});
$("#results").append(router1.$deferred.state() + "<br>");  //pending
router1.$deferred.resolve();
$("#results").append(router1.$deferred.state() + "<br>"); // resolved

var router2 = new Router({});
$("#results").append(router2.$deferred.state() + "<br>"); //resolved -- should be pending
router2.$deferred.resolve();
$("#results").append(router2.$deferred.state() + "<br>"); //resolved

http://jsfiddle.net/Nv7ep/

4

1 に答える 1

2

更新されたフィドルは次のとおりです。http://jsfiddle.net/phoenecke/Nv7ep/1/

var Router = Backbone.Router.extend({
    initialize: function () {
        // add the deferred object to the new instance.
        this.$deferred = new $.Deferred();
    }

});

のようにプロパティをextend追加すると、プロトタイプに追加されるため、$deferredすべてのインスタンスで共有されます。Router のインスタンスごとに deferred の一意のインスタンスが必要な場合は、 に追加する必要がありますinitialize

于 2013-04-06T20:19:54.077 に答える