Ah, nach genauerem Durchgehen fällt mir auf, dass es gar nicht an self:GetParent().name liegt, sondern an self.itemID.
Rausfinden kannst Du das, wenn Du im OnClick-Handler ein paar test-prints einfügst:
Lua Code:
checkboxObj:SetScript("OnClick", function(self)
print(self:GetParent().name)
print(self.itemID)
MillButton_Herblist[self:GetParent().name][self.itemID] = self:GetChecked()
end)
Dann wird nämlich beim ersten wie geplant der Name der Erweiterung ausgegeben und beim zweiten Nil.
Das liegt daran, dass "self" ja eine Referenz auf das Checkbox-Objekt ist, und wir nirgendwo das Attribut itemID dafür festlegen.
Das lässt sich so lösen (Zeile 9):
Lua Code:
--alle kräuter der jeweiligen untertabelle durchgehen und jeweils eine checkbox erstellen
--ankerpunkt für die erste checkbox
local tAnchorPointY = -10
for itemID, optionValue in pairs(MillButton_Herblist[expansion]) do
--name des krauts für das label der checkbox holen
local itemName = GetItemInfo(itemID)
--checkbox erstellen (siehe helper function unten) und für späteren zugriff referenz auf checkbox-objekt mit itemid vom kraut als index in herbCheckboxes speichern
self.herbCheckboxes[itemID] = Addon:CreateOptionsCheckButton(self, itemName)
self.herbCheckboxes[itemID].itemID = itemID
--passend anordnen
self.herbCheckboxes[itemID]:SetPoint("TOPLEFT", self.parent, "TOPLEFT", 10, tAnchorPointY)
--ankerpunkt für die nächste checkbox
tAnchorPointY = tAnchorPointY - self.herbCheckboxes[itemID]:GetHeight()
end
--alle inhalte self.herbCheckboxes durchgehen und den aktuellen wert (checked/nicht checked bzw. true/false) für die checkbox entsprechend der db festlegen
for itemID, checkboxObj in pairs(self.herbCheckboxes) do
--wert der checkbox entsprechend der tabelle festlegen
checkboxObj:SetChecked(MillButton_Herblist[expansion][itemID])
--bei wertänderung in der db speichern
checkboxObj:SetScript("OnClick", function(self)
MillButton_Herblist[self:GetParent().name][self.itemID] = self:GetChecked()
end)
end
Wie die Anzahl kann mir da eigentlich egal sein?!
Wie soll ich denn sonst diesen Umbruch machen?
|
Na, Du zählst einfach mit und rechnest alle 19 mal etwas auf den x-Offset drauf.
Lua Code:
local tAnchorPointY = -10
local tAnchorPointX = 0
local tAnchorPointCount = 0
for itemID, optionValue in pairs(MillButton_Herblist[expansion]) do
--name des krauts für das label der checkbox holen
local itemName = GetItemInfo(itemID)
--checkbox erstellen (siehe helper function unten) und für späteren zugriff referenz auf checkbox-objekt mit itemid vom kraut als index in herbCheckboxes speichern
self.herbCheckboxes[itemID] = Addon:CreateOptionsCheckButton(self, itemName)
self.herbCheckboxes[itemID].itemID = itemID
--passend anordnen
self.herbCheckboxes[itemID]:SetPoint("TOPLEFT", self.parent, "TOPLEFT", tAnchorPointX, tAnchorPointY)
--ankerpunkt für die nächste checkbox
tAnchorPointY = tAnchorPointY - self.herbCheckboxes[itemID]:GetHeight()
tAnchorPointCount = tAnchorPointCount + 1
if tAnchorPointCount > 19 then
tAnchorPointX = tAnchorPointX + 50
tAnchorPointY = -10
tAnchorPointCount = 0
end
end
Das kann man natürlich anders deutlich eleganter lösen, aber ich dachte mir so ists vielleicht erstmal an ersichtlichsten.
[e]
Wenn wir noch weiter darüber diskutieren wäre es gut, wenn Du irgendwo Deinen aktuellen Code einmal komplett bereitstellst. Sonst wird der aktuelle Stand langsam schwer nachvollziehbar.
[e2]
Bei erneutem Lesen bin ich mir unsicher, ob das ganze überhaupt für Dich nachvollziehbar ist oder Du nur das was ich geschrieben habe als Black-Box nutzt. Also z. B. was self.GetParent().name macht und sowas. Wenn Dir also was unklar ist oder Du Fragen hast, dann frag.
![Smile](//cdn-wow.mmoui.com/images/style_mmoi_wowi2/smilies/smile.gif)
Es macht langfristig ja nur wenig Sinn wenn Du überhaupt nicht nachvollziehen kannst was einzelne Teile machen und sie nur einfach so verwendest.