尝试索引字段"文本"(零值)



我在插件开发期间在我的WOW客户端收到以下错误

83x FrameXMLOptionsFrameTemplates.lua:157: attempt to index field 
'text' (a nil value)
FrameXMLOptionsFrameTemplates.lua:157: in function <FrameXMLOptionsFrameTemplates.lua:156>
Locals:
self = ShiftDropDown_Button {
 0 = <userdata>
 toggle = ShiftDropDown_ButtonToggle {
 }
}
(*temporary) = nil
(*temporary) = nil
(*temporary) = nil
(*temporary) = nil
(*temporary) = nil
(*temporary) = nil
(*temporary) = nil
(*temporary) = nil
(*temporary) = "attempt to index field 'text' (a nil value)"

我正在用此

在XML文件中调用它
        <Button name="ShiftDropDown_Button" inherits="InterfaceOptionsListButtonTemplate" text="Select Target">
            <Size>
                <AbsDimension x="150" y="10" />
            </Size>
            <Anchors>
                <Anchor point="TOPLEFT">
                    <Offset x="189" y="-115" />
                </Anchor>
            </Anchors>
            <Scripts>
                <OnLoad>
                    ShiftDropDown_Button_OnLoad(self)
                </OnLoad>
                <OnClick>
                    ShiftDropDownFrame:Show()
                </OnClick>
            </Scripts>

和LUA中的功能在这里

function ShiftDropDown_Button_OnLoad(self)
    self:RegisterEvent('ADDON_LOADED')
    self:SetScript('OnEvent', function(self, event, ...)
        if event == 'ADDON_LOADED' and ... == 'TauntMasterReborn' then
            TauntMasterRebornDB = TauntMasterRebornDB or {}
            for option, value in pairs(TauntM_defaults) do
                if not TauntMasterRebornDB[option] then TauntMasterRebornDB[option] = value end
            end
            self:SetText(TauntMasterRebornDBChar.SHIFTTARGET1)
        end
    end)
end

任何人都可以阐明为什么要丢这个错误吗?我已经搜索了很多示例,无法找到一种调试或解决自己的方法。

您的按钮从InterfaceOptionsListButtonTemplate继承,该按钮最初从OptionsListButtonTemplate继承。

此模板具有按钮文本:

<ButtonText name="$parentText" justifyH="LEFT" wordwrap="false"/>

这是发生错误的代码:

function OptionsListButton_OnEnter (self)
  if (self.text:IsTruncated()) then
    GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
    GameTooltip:SetText(self:GetText(), NORMAL_FONT_COLOR[1], NORMAL_FONT_COLOR[2], NORMAL_FONT_COLOR[3], 1, true);
  end
end

它试图通过使用self.text使用按钮文本的属性值 - 在这种情况下为self-。text ParentKey在XML文件中未分配,而是在OnLoad中分配功能,被您的覆盖。

要修复模板,您必须扩展ShiftDropDown_Button_OnLoad功能:

function ShiftDropDown_Button_OnLoad(self)
    self.text = _G[self:GetName() .. "Text"];
    self.highlight = self:GetHighlightTexture();
    self:RegisterEvent('ADDON_LOADED')
    self:SetScript('OnEvent', function(self, event, ...)
        if event == 'ADDON_LOADED' and ... == 'TauntMasterReborn' then
            TauntMasterRebornDB = TauntMasterRebornDB or {}
            for option, value in pairs(TauntM_defaults) do
                if not TauntMasterRebornDB[option] then TauntMasterRebornDB[option] = value end
            end
            self:SetText(TauntMasterRebornDBChar.SHIFTTARGET1)
        end
    end)
end

相关内容

  • 没有找到相关文章

最新更新