2016-04-09 8 views
1

Ich bin neu zu ExtJS.
Ich weiß nicht, warum dieser Code nicht funktioniert.
Es gibt mirLernen ExtJS, Referenceerror Problem

ReferenceError: Country is not defined

Hier ist der Code:

Ext.define("Continent", { 
extend: "Ext.data.Model", 
fields: ["name"] 
}); 
Ext.define("City", { 
extend: "Ext.data.Model", 
fields: ["name"] 
}); 
Ext.define("CountryDetails", { 
extend: "Ext.data.Model", 
fields: ["id","population"], 
}); 

Ext.define("Country", { 
extend: "Ext.data.Model", 
idProperty : "name", 
fields: ["name", "capital"], 
hasMany: [{ name: "cities", model: "City"}], 
hasOne: [{model:"CountryDetails"}], 
belongsTo: [{ model: "Continent"}], 
proxy : { 
    type : "memory", 
    data : { 
    country : { 
     name : "France", 
     capital : "Paris", 
     countrydetails : { 
      id : "cd101", 
      population : 65436552 
     }, 
     cities : [{name:"Lyon"},{name:"Avignon"}], 
     continent : { 
      name : "Europe" 
     } 
    } 
}, 
reader : { 
    type : "json", 
    root : "country" 
    } 
} 
}); 

Country.load("France",{ 
success : function(record){ 
    var continent = record.getContinent(); 
    console.log(continent.get("name")); 
    var countryDetails = record.getCountryDetails(); 
    console.log(countryDetails.get("population")); 
    var cities = record.cities(); 
    cities.each(function(city){ 
     console.log(city.get("name")); 
    }); 
} 
}); 

ich aus dem Buch Pratical ExtJS kopiert 4 und es funktioniert nicht ... Ich bin mit der nicht glücklich Autor ...

+1

Ich denke, Sie fehlen eine Zeile wie 'var Country = Ext.create ('Country');' oder ähnlich. 'Ext.define' definiert eine" Klasse "und' Ext.create' erstellt eine Instanz. – Alexander

+0

@Alexander Ich versuchte es, aber es gab mir viele Fehler. Vorzüglich sollte es nur mit dem Modell arbeiten, ich denke, der Autor würde etwas so Offensichtliches wie eine .create() nicht verpassen. – alexandre1985

+0

Wie funktioniert der Code in Ext 4.x wie erwartet - Sie sollten versuchen, Ihren Fehler in einer [Fidel] (http://fiddle.sencha.com) zu reproduzieren. – Emissary

Antwort

0

Ihr Code ist perfekt funktioniert, überprüfen jsfiddle Link https://fiddle.sencha.com/#fiddle/1bsc

Ext.application({ 
name : 'Fiddle', 

launch : function() { 
    Ext.define("Continent", { 
     extend: "Ext.data.Model", 
     fields: ["name"] 
    }); 
    Ext.define("City", { 
     extend: "Ext.data.Model", 
     fields: ["name"] 
    }); 
    Ext.define("CountryDetails", { 
     extend: "Ext.data.Model", 
     fields: ["id", "population"], 
    }); 
    Ext.define("Country", { 
     extend: "Ext.data.Model", 
     idProperty: "name", 
     fields: ["name", "capital"], 
     hasMany: [{ 
      name: "cities", 
      model: "City" 
     }], 
     hasOne: [{ 
      model: "CountryDetails" 
     }], 
     belongsTo: [{ 
      model: "Continent" 
     }], 
     proxy: { 
      type: "memory", 
      data: { 
       country: { 
        name: "France", 
        capital: "Paris", 
        countrydetails: { 
         id: "cd101", 
         population: 65436552 
        }, 
        cities: [{ 
         name: "Lyon" 
        }, { 
         name: "Avignon" 
        }], 
        continent: { 
         name: "Europe" 
        } 
       } 
      }, 
      reader: { 
       type: "json", 
       root: "country" 
      } 
     } 
    }); 

    Country.load("France", { 
     success: function(record) { 
      var continent = record.getContinent(); 
      var countryDetails = record.getCountryDetails(); 

      document.write(countryDetails.get("population") + '<br />'); 

      var cities = record.cities(); 
      cities.each(function(city) { 
       document.write(city.get("name") + '<br />'); 
      }); 
     } 
    }); 
} 
});