2013-03-04 53 views
1

我有一個應用程序,我一直在開發一段時間,現在總是在本地機器上。我現在把它放到服務器環境中,並且遇到了問題,我相信這些問題與將模板插入到Backbone視圖中時jQuery的.html()函數的時間有關。Backbone.js jQuery渲染時間問題

在到代碼(重要的部分):

的application.js

define(["models/mapModel", 
     "views/base/mapView"],function(MapModel, MapView){ 
    var initialize = function(){ 

    // Set up the application here 
    var mapModel, mapView; 

    dojo.ready(function(){ 

     mapModel = new MapModel(); 

     mapView = new MapView({ 
      model : mapModel 
     }); 

     $("#appRoot").html(mapView.render().el); 

    }); 
    }; 

    return { 
    initialize: initialize 
    }; 
}); 

ViewTemplate.html

<div id="map">map goes here</div> 

mapView.js

// 'viewTemplate' is being retrieved with dojo's define() method, 
    // this is not the issue as it is working in many other places. 

    initialize : function(){ 
     var selectFeature = lang.hitch(this, this.getFeature); 
     topic.subscribe("selectFeature", selectFeature); 
    }, 
    render : function(){ 
     var tmpl = _.template(viewTemplate); 
     this.$el.html(tmpl()); 
     this.model.on("change:map", this.createLocator, this); 

     //Create the map once everything is drawn 
     $(document).ready($.proxy(
      function() { 
       this.createMap(); 
      }, 
     this)); 

     return this; 
    }, 
    createMap : function(){ 
     console.log($('#appRoot').length); // returns 1 
     console.log($('#map').length);  // returns 0 
    } 

我的問題由CreateMap函數中的兩行來說明。 #appRoot是在index.html中靜態定義的,而#map是由jQuery的.html()函數在render中插入的。看起來#map元素在CreateMap()觸發時未被插入。再次,這隻會發生在從本地主機以外的機器點擊應用程序。

感謝 JP

+0

您是否嘗試過調用'#map'的JQuery調用?即'console.log(this。$('#map')。length);' – mnoble01 2013-03-04 19:41:55

回答

2

嘗試this.$('#map').length

$('#map').length不起作用,因爲#map尚未添加到頁面,因爲您在添加它之前調用了渲染。

$("#appRoot").html(mapView.render().el); //渲染視圖,然後添加到頁面。

下面的代碼也可以解決它,但是使用this.$反正更好。

$("#appRoot").html(mapView.el); // add to page 
mapView.render(); // render 
+0

非常感謝。我最初嘗試了你的第一個建議 - 但是在CreateMap()中,我依賴於需要#map存在於dom中的第三方API,所以我認爲你提供的第一個修補程序在這種情況下不起作用。我只是解開了application.js中的render()和el方法,一切都很好。再次感謝! – jpeterson 2013-03-04 20:08:00