为什么new关键字不能创建Router类的唯一实例?

时间:2013-04-06 20:14:43

标签: javascript backbone.js

在此示例中,为什么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

http://jsfiddle.net/Nv7ep/

1 个答案:

答案 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中。