从ObservableArray访问对象值并将其显示在Label

时间:2018-11-08 07:10:41

标签: javascript nativescript

我无法访问存储在ObservableArray中的对象的值:

const observable = require("tns-core-modules/data/observable");
const ObservableArray = require("tns-core-modules/data/observable-array").ObservableArray;

var myArray = new ObservableArray([]);

var pageData = observable.fromObject({
    myArray: myArray
});

exports.onLoad = function (args) {
    const page = args.object;
    page.bindingContext = pageData;
    // a Bluetooth plugin returns a peripheral object
    myArray.push(peripheral);
    //console.log(Object.keys(peripheral));
}

console.log()函数像这样打印peripheral对象:

JS: [type, UUID, name, RSSI, state, advertisement, manufacturerId, manufacturerData]

这是我的XML文件:

<Page loaded="onLoad">
    <ListView items="{{ myArray }}">
        <ListView.itemTemplate>
            <StackLayout>
                <Label text="{{ peripheral['UUID'] }}"/>
            </StackLayout>
        </ListView.itemTemplate>
    </ListView>
</Page>

ListView项可以很好地加载,但是我无法让Label显示外围对象的任何值。我很确定peripheral['UUID']语法是错误的,但是我找不到有关如何访问此数据的信息...

任何帮助或指向正确方向的指针将不胜感激。

2 个答案:

答案 0 :(得分:0)

peripheral只是数组中不存在的变量名。只需绑定UUID

<Page loaded="onLoad">
<ListView items="{{ myArray }}">
    <ListView.itemTemplate>
        <StackLayout>
            <Label text="{{ UUID }}"/>
        </StackLayout>
    </ListView.itemTemplate>
</ListView>
</Page>

答案 1 :(得分:0)

好吧,经过一番咖啡和更多的反复试验后,解决方案非常简单:

<Page loaded="onLoad">
    <ListView items="{{ myArray }}">
        <ListView.itemTemplate>
            <StackLayout>
                <!-- just using 'UUID' here -->
                <Label text="{{ UUID }}"/>
            </StackLayout>
        </ListView.itemTemplate>
    </ListView>
</Page>

显然,ObservableArray中对象的值仅对XML文件可见。您只需要使用值的名称即可,在我的情况下为UUIDname

我显然必须仔细阅读可观察变量背后的机制,现在对我来说这似乎很神奇。