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.
Es macht langfristig ja nur wenig Sinn wenn Du überhaupt nicht nachvollziehen kannst was einzelne Teile machen und sie nur einfach so verwendest.