在此示例中,为什么new关键字不会创建正在使用的Router类的唯一实例?您可以看到我的简单路由器具有$ deferred属性,该属性得到解决,但即使在创建新类并再次测试状态时,它仍然会被解析,而不是在创建新类时重置为“pending”。 / p>
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
答案 0 :(得分: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
中。