nativescript - 如何从 Nativescript/JS 中的 ListView 点击事件传递/接收项目详细信息?
问题描述
我想做的(我认为)是从itemTap事件中获取store.id并将其与.navigate()一起传递,以便我可以使用它来获取详细信息页面的正确数据,但是我无法弄清楚如何获得点击的项目。
我有一个 list-page.xml:
<Page loaded="loaded" xmlns:lv="nativescript-ui-listview">
<ActionBar title="Bars"></ActionBar>
<GridLayout>
<ListView items="{{ storeList }}" row="1" itemTap="showDetail">
<ListView.itemTemplate >
<GridLayout class="grocery-list-item" >
<Label class="p-15" text="{{ name }}" />
</GridLayout>
</ListView.itemTemplate>
</ListView>
</GridLayout>
和 list-page.js:
var dialogsModule = require("tns-core-modules/ui/dialogs");
var observableModule = require("tns-core-modules/data/observable");
var ObservableArray = require("tns-core-modules/data/observable-array").ObservableArray;
var page;
var StoreListViewModel = require("../shared/view-models/store-list-view-model");
var frameModule = require("tns-core-modules/ui/frame");
var storeList = new StoreListViewModel([]);
var pageData = new observableModule.fromObject({
storeList:storeList
});
exports.loaded = function (args) {
page = args.object;
page.bindingContext = pageData;
sindex = args.object.bindingContext;
storeList.empty();
storeList.load();
};
exports.showDetail = function() {
frameModule.topmost().navigate("views/detail/detail-page");
};
storeList 来自我的 api,并成功发回由 listview 呈现的商店列表。
我查看了十几个其他教程/问题,其中几个似乎提到从 args.index 或 args.object.bindingContext 获取它,但是当我从 showDetail 函数中获取它时,它是未定义的. console.log(args.object.bindingContext) 给了我一堆数据,但无论我点击哪一行,它都是相同的......
CONSOLE LOG file:///app/bundle.js:359:12: {
"_observers": {
"propertyChange": [
{}
]
},
"_map": {
"storeList": {
"_observers": {
"change": [
{}
]
},
"_array": [
{
"name": "Hipster's Coffee",
"address": "2200 Broadway, Oakland, CA 94612",
"id": 2
},
{
"name": "Suzy's Stationary",
"address": "630 Divisadero St., San Francisco, CA 94117",
"id": 3
}
],
"_addArgs": {
"eventName": "change",
"object": "[Circular]",
"action": "add",
"index": 1,
"removed": [],
"addedCount": 1
},
"_deleteArgs": {
"eventName": "change",
"object": "[Circular]",
"action": "delete",
"index": null,
"removed": null,
"addedCount": 0
}
}
},
"storeList": "[Circular]"
}
我对 NativeScript 很陌生,所以显然我在这里遗漏了一些简单的东西。
解决方案
<ListView items="{{ storeList }}" row="1" itemTap="{{showDetail}}">
看看这里的示例游乐场。
推荐阅读
- c# - 尝试通过和迁移共享数据库上下文时出错
- regex - 如何使用引号作为转义序列将值与字符串分开?
- aspnetboilerplate - 管道构建 devops
- python - 我从这段代码返回一个 JSON 响应,我得到 [ ]
- angularjs - Firestore:snapshotChanges 不是函数
- php - 寻找将小时和分钟附加到修改后的 Datetime 对象的更好方法
- jenkins - 使用 Jenkins 触发器执行管道的测试套件运行
- javascript - 如何使用 Javascript 淡出元素
- sql - 获取要添加的值加 1 以在 SQL Server 存储过程中工作
- docker - 如何在 Docker Desktop 上创建新的 Kubernetes 集群?