我正在開發RPG遊戲作爲愛好和學習語言的方式。現在正在處理庫存。操作DOM時無法獲取對象方法
我正在使用Jquery UI構建模態對話框。當涉及到庫存時,我有兩個主要對話框:一個顯示角色細節,一個顯示玩家訪問的城市細節。這兩個對話框都包含具有不同ID的div,但是class =「bagpack」。其目的是通過按課程分配div並在不利用div id的情況下操作它們(節省一些代碼並增加更多靈活性)來反映播放器bagpack中的當前項目。
當涉及到庫存項目時,我通過.push(新劍)將對象構造函數和push元素放入相關庫存數組中。每個項目都有一些方法,即點擊,鼠標懸停,鼠標懸停 - 這對我所面臨的問題至關重要。
因此,當用戶打開城市對話框或角色詳細信息對話框時,將調用gameConfig.inventory.draw('bagpack'),並根據哪些對象位於bagpack數組中,來重繪div .bagpack。 DOM會相應地進行調整,但玩家只能在他正在查看的模式對話框中看到效果。
下面是代碼:
inventory: { //object within an object
market: [],
bagpack: [],
active: [],
arrows: [],
draw: function(inventoryArray, itemType){
$('.'+inventoryArray).empty();
gameConfig.inventory[inventoryArray].sort(function(a, b){ //sort array alphabetically
var nameA=a.name.toLowerCase(), nameB=b.name.toLowerCase()
if (nameA < nameB) //sort string ascending
return -1
if (nameA > nameB)
return 1
return 0 //default return value (no sorting)
});
if (itemType === undefined){ //array items will not be filtered
for(i=0; i<gameConfig.inventory[inventoryArray].length; i++) {
var item = gameConfig.inventory[inventoryArray][i];
item.div = $("<div/>");
item.div.addClass("inventoryItem");
item.div.css({"background-color": item.backgroundColor});
item.div.css({"background-image":"url('"+item.icon+"')"});
item.div.get(0).obj = item; //link DOM elemnt to an object
item.div.click(function(){
this.obj.clicked();
});
item.div.mouseover(function() {
this.obj.getInfo();
});
item.div.mouseout(function() {
this.obj.mouseLeft();
});
item.div.appendTo('.'+inventoryArray);
}
} else { //array items will be filtered
}
}
}
什麼情況是:
- 我得到物品申報單(背景圖像,顏色等),同時顯示在模態對話框,這 周圍沒有問題
- 現在,談到方法時,我面對奇怪的行爲。目前看來,在一個模態對話框方法的工作,而在另一個模式對話框中遇到了以下錯誤:遺漏的類型錯誤:無法讀取的不確定
財產「mouseLeft」我並不完全明白髮生了什麼,以及爲什麼在在數組中找到的一個個案對象處理正常,在另一種情況下,它們的方法會丟失。
處理的錯誤意味着'this.obj'是未定義的。我建議使用'console.log(this)'並檢查它看看發生了什麼 – Oriol
@Oriol事實上,在一種情況下this.obj返回一個對象(在方法工作的情況下),而在另一種情況下,它會導致未定義(當methodos不工作)。所以有一個問題鏈接到一個對象的div? – Vadimster
在您的開發控制檯中檢查:gameConfig.inventory [inventoryArray] .. 此外,您可能會發現item.div.data('obj',item)更適合將對象鏈接到元素。 – Clay