2012-05-18 4 views
5

próbuję modyfikować ten przykład http://storelocator.googlecode.com/git/examples/panel.htmlsklep google mapy lokalizatora modyfikować Hardcoded inicjalizacji do dynamicznego

kod javascript jest tutaj: https://gist.github.com/2725336

aspekt Mam trudności ze zmienia się następująco:

MedicareDataSource.prototype.FEATURES_ = new storeLocator.FeatureSet(
    new storeLocator.Feature('Wheelchair-YES', 'Wheelchair access'), 
    new storeLocator.Feature('Audio-YES', 'Audio') 
); 

utworzyć FeatureSet z funkcji, na przykład tak, że mają tę funkcję, która przetwarza obiekt JSON

WPmmDataSource.prototype.setFeatures_ = function(json) { 
    var features = []; 

    // convert features JSON to js object 
    var rows = jQuery.parseJSON(json); 

    // iterate through features collection 
    jQuery.each(rows, function(i, row){ 

    var feature = new storeLocator.Feature(row.slug + '-YES', row.name) 

    features.push(feature); 
    }); 

    return new storeLocator.FeatureSet(features); 
    }; 

tak następnie zmienić pierwszy fragment kodu na coś podobnego

WPmmDataSource.prototype.FEATURES_ = this.setFeatures_(wpmm_features); 

która zwraca błąd:

Uncaught TypeError: Object [object Window] has no method 'setFeatures_' 
+0

Umieszczam wersję demo tego tutaj: http://demo.wpconsult.net/ możesz zobaczyć komunikaty o błędach w konsoli – paul

Odpowiedz

1

myślę po prostu trzeba dokonać pewnych zmian w WPmmDataSource.prototype i swojej setFeatures_ metoda:

WPmmDataSource.prototype = { 
    FEATURES_ : null,   
    setFeatures_ : function(json) { 
     //Set up an empty FEATURES_ FeatureSet 
     this.FEATURES_ = new storeLocator.FeatureSet(); 
     //avoid the use of "this" within the jQuery loop by creating a local var 
     var featureSet = this.FEATURES_; 
     // convert features JSON to js object 
     var rows = jQuery.parseJSON(json); 
     // iterate through features collection 
     jQuery.each(rows, function(i, row) { 
      featureSet.add(
       new storeLocator.Feature(row.slug + '-YES', row.name)); 
     }); 
    } 
} 

Dzięki temu nie musisz wykonywać zadania, zwracając wartość od setFeatures_; ma bezpośredni dostęp do członka FEATURES_. Dlatego linia:

WPmmDataSource.prototype.FEATURES_ = this.setFeatures_(wpmm_features); 

nie jest już potrzebna. Oznacza to również, że później, po utworzeniu instancji WPmmDataSource, kod może działać tak:

var wpmd = new WPmmDataSource(/* whatever options, etc. you want */); 
wpmd.setFeatures_(json); 
// Thereafter, wpmd will have its FEATURES_ set 

Nie jestem do końca pewien, co chce osiągnąć, ale wierzę, że to będzie Ci ponad przeszkoda twojego obecnego stoiska. Mam nadzieję, że to cię posunie do przodu -

+0

dzięki, ale FEATURES_ musi być dostępny dla klasy metody, jak widać, jest używany do przypisywania funkcji do sklepów w funkcji parse_. Jeśli używam Twojego kodu, features.add (this.FEATURES_.getById ('Wheelchair-' + row.Wheelchair)); funkcja zgłasza błąd w getById, ponieważ funkcja FEATURES_ jest niezdefiniowana. Jakieś sugestie? – paul

+0

Pewnie. Miło, że mogłem pomóc. Dokonałem korekty powyższego kodu, aby poprawnie utworzyć "FEATURES_" i upewnić się, że jest on dostępny dla wszystkich metod w klasie JavaScript "WPmmDataSource". –

+0

dzięki Sean, w końcu to wymyśliłem z twoją pomocą. Doceń wysiłek. Po prostu musiałem zapisać FEATURES_ do zmiennej w funkcji parse_, aby ją wreszcie uruchomić. – paul