NativeScript:更改属于ListView的Button的背景颜色和文本

时间:2018-07-11 15:31:58

标签: javascript ios nativescript

我需要一个2状态切换按钮:每次点击时,都会更改其背景颜色和其文本标签(颜色和文本)。它的实现很简单,当按钮属于简单页面时,它可以正常工作。 相反,将按钮放在简单列表的每个元素(20个元素)中时,它不会更改其背景颜色,只会更改其标签文本,而不会更改其颜色。

这里有一些代码详细信息可以检查问题:

<StackLayout orientation="vertical" >
    <ListView items="{{ items }}" itemTap="onItemTap">
        <ListView.itemTemplate>
            <StackLayout orientation="vertical" class="follow-button">
                <Button text="Undefined" tap="onTap"/>
            </StackLayout>
        </ListView.itemTemplate>
    </ListView>
</StackLayout>   

并且在js方面(“值”未绑定到按钮,此处仅用于演示列表中单个按钮的点击问题):

var value = 1;
exports.onTap = function (args) {
    view  = args.object;
    value = value === 1 ? 0 : 1;
    view.text            = value === 1 ? "button on" : "button off";
    view.backgroundColor = value === 1 ? "red"       : "white";
    view.color           = value === 1 ? "white"     : "red";
}

我看到,删除或修复文本后,每次点击时背景都会正确更改。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

我发现描述为here 似乎的修复程序就像一个符咒!

这是我发现的唯一解决方案,可以使应用程序代码完整无缺,而没有引入任何技巧来打破使用组件背后的哲学。

只需输入:

Object.defineProperty(View.prototype, "isLayoutValid", {
    get: function () {
        return (this._privateFlags & PFLAG_LAYOUT_REQUIRED) !== PFLAG_LAYOUT_REQUIRED;
    },
    enumerable: true,
    configurable: true
});   

node_modules/tns-core-modules/ui/core/view/view.ios.js

一切都神奇地修复了!