Tengo el siguiente objeto principal:

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
   }) 
}

En el código anterior, model : Context.ContextModel arroja un error que dice Uncaught ReferenceError: Context is not defined. He definido el Objeto de contexto pero de alguna manera no lo ve. Podría alguien ayudarme. Gracias

0
felix 14 jul. 2011 a las 07:02

3 respuestas

La mejor respuesta

Miremos a través de los ojos del intérprete de JavaScript. Tiene una declaración, Context = { ... }. Para ejecutar esa declaración, primero tiene que construir { ... } para que pueda asignarla a Context. Para construir el { ... }, necesita evaluar new Context.ContextList. Desafortunadamente, todavía está construyendo la parte { ... }, y aún no ha asignado nada a Context. Por lo tanto, Context no está definido cuando intenta crear una nueva instancia de Context.ContextList. Tiene el mismo problema al intentar acceder a Context.ContextModel al crear Context.ContextList. Prueba esto:

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();
5
icktoofay 14 jul. 2011 a las 03:06

Prefiero escribirlo de esta manera

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
   }) 
}
0
airportyh 14 jul. 2011 a las 03:23
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
}); 

Problema resuelto.

El problema es que estás haciendo lógica en tu asignación del objeto literal. La variable Context solo existe después de que finaliza la asignación, que finaliza después de que se construye el objeto literal.

Para evitar esto, no realice una ejecución lógica en un objeto literal, debe ser una colección estática de valores y métodos.

2
Raynos 14 jul. 2011 a las 03:06