我有一個應用程序,我一直在開發一段時間,現在總是在本地機器上。我現在把它放到服務器環境中,並且遇到了問題,我相信這些問題與將模板插入到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
您是否嘗試過調用'#map'的JQuery調用?即'console.log(this。$('#map')。length);' – mnoble01 2013-03-04 19:41:55