Backbone.js怀疑

时间:2011-07-14 03:02:29

标签: javascript backbone.js

我有以下父对象:

Context = {
   ContextModel: Backbone.Model.extend({
      //model Code
   }),
   ContextList:Backbone.Collection.extend({
      model : Context.ContextModel
      // collection Code
   }),
   Contexts: new Context.ContextList,
   ContextView: Backbone.View.extend({
      // view Code
   }) 
}

在上面的代码中,model : Context.ContextModel会引发错误Uncaught ReferenceError: Context is not defined。我已经定义了Context对象,但不知何故它没有看到它。请有人帮帮我。 感谢

3 个答案:

答案 0 :(得分:5)

让我们来看看JavaScript解释器的眼睛。你有一个声明,Context = { ... }。为了执行该语句,它必须首先构造{ ... },以便将其分配给Context。为了构建{ ... },需要评估new Context.ContextList。不幸的是,它仍在构建{ ... }部分,尚未向Context分配任何内容。因此,当您尝试创建Context的新实例时,Context.ContextList未定义。在创建Context.ContextModel时尝试访问Context.ContextList时遇到同样的问题。试试这个:

Context = {
   ContextModel: Backbone.Model.extend({
      //model Code
   }),
   ContextView: Backbone.View.extend({
      // view Code
   }) 
}
Context.ContextList=Backbone.Collection.extend({
    model : Context.ContextModel
    // collection Code
});
Context.Contexts=new Context.ContextList();

答案 1 :(得分:2)

var Context = {};
Context.ContextModel = Backbone.Model.extend({
      //model Code
});
Context.ContextList = Backbone.Collection.extend({
   model : Context.ContextModel
   // collection Code
});
Context.Contexts = new Context.ContextList;
Context.ContextView = Backbone.View.extend({
   // view Code
}); 

问题解决了。

问题在于你在分配Object文字时所做的逻辑。 Context变量仅在赋值完成后才存在,该变量在构造对象文字后结束。

为了避免这种情况,不要在对象文字中执行逻辑执行,它应该是值和方法的静态集合。

答案 2 :(得分:0)

我更喜欢这样写作

var ContextModel = Backbone.Model.extend({
      //model Code
   })
var ContextList = ContextModel({
      model : contextModel
      // collection Code
   })
var Context = {
   ContextModel: ContextModel,
   ContextList: ContextList,
   Contexts: new ContextList,
   ContextView: Backbone.View.extend({
      // view Code
   }) 
}