2012-05-18 15 views
5

Tôi đang cố gắng để thay đổi ví dụ này http://storelocator.googlecode.com/git/examples/panel.htmlgoogle lưu trữ bản đồ định vị sửa đổi khởi hardcoded để động

mã javascript là ở đây: https://gist.github.com/2725336

khía cạnh Tôi đang gặp khó khăn với thay đổi này:

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

để tạo ra các featureset từ một chức năng, ví dụ như vậy tôi có chức năng này mà phân tích một đối tượng 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); 
    }; 

như vậy thì thay đổi đoạn mã đầu tiên để một cái gì đó giống như

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

mà trả về một lỗi:

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

Tôi đặt bản trình diễn này tại đây: http://demo.wpconsult.net/ bạn có thể thấy thông báo lỗi trong bảng điều khiển – paul

Trả lời

1

Tôi nghĩ rằng bạn chỉ cần thực hiện một số thay đổi đối với WPmmDataSource.prototypesetFeatures_ của bạn phương pháp:

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

Và với điều này, bạn không phải thực hiện nhiệm vụ bằng cách trả lại một giá trị từ setFeatures_; nó có quyền truy cập trực tiếp vào thành viên FEATURES_. Vì vậy, dòng:

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

không còn cần thiết nữa. Điều này cũng có nghĩa là sau đó, khi bạn đã tạo ra một thể hiện của WPmmDataSource, mã của bạn có thể làm việc như thế này:

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

Tôi không chắc chắn chính xác những gì bạn đang cố gắng để đạt được, nhưng tôi tin rằng điều này sẽ giúp bạn vượt qua rào cản của gian hàng hiện tại của bạn. Tôi hy vọng điều này giúp bạn di chuyển về phía trước -

+0

cảm ơn, nhưng FEATURES_ cần phải truy cập được vào lớp học các phương thức, như bạn thấy nó đang được sử dụng để gán các tính năng cho các cửa hàng trong hàm parse_. Nếu tôi sử dụng mã của bạn, các features.add (this.FEATURES_.getById ('Xe lăn-' + hàng.Wheelchair)); Hàm ném lỗi trên getById vì FEATURES_ không xác định. Bất kỳ đề xuất nào? – paul

+0

Chắc chắn. Vui mừng được giúp đỡ. Tôi đã điều chỉnh mã ở trên để tạo đúng 'FEATURES_' và đảm bảo rằng nó có sẵn cho tất cả các phương thức trong lớp JavaScript' WPmmDataSource'. –

+0

cảm ơn Sean, tôi cuối cùng đã tìm ra nó với sự giúp đỡ của bạn. Đánh giá cao nỗ lực. Tôi chỉ cần lưu FEATURES_ vào một biến trong hàm parse_ để làm cho nó hoạt động. – paul

Các vấn đề liên quan