我无法访问存储在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']
语法是错误的,但是我找不到有关如何访问此数据的信息...
任何帮助或指向正确方向的指针将不胜感激。
答案 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文件可见。您只需要使用值的名称即可,在我的情况下为UUID
或name
。
我显然必须仔细阅读可观察变量背后的机制,现在对我来说这似乎很神奇。