我有以下父对象:
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对象,但不知何故它没有看到它。请有人帮帮我。
感谢
答案 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
})
}