使用Nativescript网格视图查找Griview中的按钮或标签

使用Nativescript网格视图查找Griview中的按钮或标签,nativescript,Nativescript,我使用GridView Nativescript来排列UI,我想动态地将css设置为特定的按钮或标签。当外部按钮是触发器并且我尝试使用getViewById方法但总是得到空结果时,如何找到内部标签。没有办法找到它吗 var gridview; exports.onPageLoaded = function (args) { page = args.object; gridview = page.getViewById("gridview"); }; exports.on

我使用GridView Nativescript来排列UI,我想动态地将css设置为特定的按钮或标签。当外部按钮是触发器并且我尝试使用getViewById方法但总是得到空结果时,如何找到内部标签。没有办法找到它吗

var gridview;
  exports.onPageLoaded = function (args) {
    page = args.object;
    gridview =  page.getViewById("gridview");

};

exports.onSelectedIndexChanged = function(args){
    var totalMatch = 0;
    var btn = args.object;
    var index = btn.index;

   var a = gridview.getViewById("25");

    btn.backgroundColor = "red";
    btn.color = "white";  
};


<GridLayout columns="*,1,*,1,*" rows="auto" borderWidth="1" borderColor="#DBDBDB" borderRadius = "3" >
            <Button text="selectALL" index="0" tap="onSelectedIndexChanged" backgroundColor= "red" id ="btnSelectAll" color="white" borderRadius="3" />
            <Button text="UnselectAll" index="1" col="2"  tap="onSelectedIndexChanged" backgroundColor= "white" id ="btnUnSelectAll" borderRadius = "3" />
            <Border col="1" borderWidth="1"  borderColor="#DBDBDB" />
            <Border col="3" borderWidth="1"  borderColor="#DBDBDB" />
        </GridLayout>   
    <gv:GridView items="{{ items }}"  verticalSpacing="3" horizontalSpacing="3" colWidth="100" rowHeight="50" padding="3" id="gridview" height="400">
                  <gv:GridView.itemTemplate>
                    <GridLayout backgroundColor="#ffffff" style="border-width:3px;border-color:#696969;border-radius:5">
                      <Button text="{{ Name }}" id="{{ Id }}" index="{{ Index }}" tap="onGridViewItemTap" backgroundColor= "white" color="red" style="background-size:100% 100%;background-repeat:no-repeat;background-image:url('~/images/drawable-hdpi-v4/spt_fiter_checked.png')"  borderWidth="1"  borderColor="#DBDBDB" borderRadius = "5"/>
                    </GridLayout>
                  </gv:GridView.itemTemplate>
                </gv:GridView>
var-gridview;
exports.onPageLoaded=函数(args){
page=args.object;
gridview=page.getViewById(“gridview”);
};
exports.onSelectedIndexChanged=函数(args){
var totalMatch=0;
var btn=args.object;
var指数=btn指数;
var a=gridview.getViewById(“25”);
btn.backgroundColor=“红色”;
btn.color=“白色”;
};

根据我的理解,您要做的是:

  • 按GridLayout中的按钮
  • 触发
    onSelectedIndexChanged
    功能
  • 使用id=“25”访问按钮
  • 修改按钮
首先,我想指出,不建议通过ID访问视图,特别是当您有一个复杂的UI结构时。我建议您使用绑定。我不确定您到底想要修改什么,所以我假设您想要更改按钮的背景属性。在这种情况下,可以将代码中的可观察对象绑定到XML中的后台属性。然后在函数
on selectedIndexChanged
中,您可以通过设置新颜色来修改代码中的对象。由于它是可观察的,它将通知所有侦听器进行修改。在我们的例子中,是XML中的属性。 在此,我向您发送一个简单的示例:

main page.xml

 <Page xmlns="http://schemas.nativescript.org/tns.xsd" loaded="onPageLoaded">
   <GridLayout  rows="auto,auto" >
      <Button text="Click to Change Color" row="0" tap="onSelectedIndexChanged"/>
      <Button text="Button" row="1" backgroundColor="{{color}}"/>
   </GridLayout> 
 </Page>

我希望这将为您提供一些指导。

您好,请检查您的代码,以便更清楚地了解您尝试执行的操作。首先-我看不出XML中在哪里使用了
onSelectedIndexChanged
。第二,你使用的是.ya,我使用的是nativescript网格视图,我真的更新了代码。抱歉显示不清楚的信息
var observable = require("data/observable");
var json={color:'red'};
var changeCss = new observable.Observable(json);

var gridview;
  exports.onPageLoaded = function (args) {
    page = args.object;
    page.bindingContext=changeCss;
};

exports.onSelectedIndexChanged = function(args){
  changeCss.set("color","blue");
};