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由所有实例共享。如果您想要为每个路由器实例提供一个唯一的延迟实例,您应该将它添加到initialize.

于 2013-04-06T20:19:54.077 回答