如何获取点击列表项的上下文以在 Nativescript 中的另一个页面中显示详细信息

2023-12-22

我正在尝试创建一个列表视图来显示硬编码数组列表中的数据及其工作良好,但我需要使用户能够单击任何项​​目以在另一个页面中显示该项目的详细信息,我该怎么做?我尝试创建另一个数组来获取详细信息,并使 BindingContext 及其工作正常,但在转换到详细信息页面时没有数据显示,如您在此处看到的

这就是我的代码:

主视图模型.js:

var Observable = require("data/observable").Observable;

function RegisterViewModel() {
    var viewModel = new Observable();
    viewModel.shows = [
        {name:"Reg1"},
        {name:"Reg2"},
        {name:"Reg3"},
        {name:"Reg4"},
        {name:"Reg5"},


    ];

    return viewModel;

}

exports.RegisterViewModel = RegisterViewModel;

main-page.js:

var RegisterViewModel = require("./main-view-model").RegisterViewModel;
var frameModule = require('ui/frame'); 


var viewModel = new RegisterViewModel();
function RegisterViewModel(args) {
var page = args.object;
page.bindingContext = RegisterViewModel();
}

exports.getInfo = function (args) {
     var navigationEntry = { 
     moduleName: "RegisterDetails",
     context: {info:args.view.bindingContext}
      }
      frameModule.topmost().navigate(navigationEntry);
    }

exports.loaded = function(args){
    args.object.bindingContext = viewModel;
}


exports.RegisterViewModel = RegisterViewModel;

主页.xml:

<Page xmlns="http://schemas.nativescript.org/tns.xsd" navigatingTo="onNavigatingTo" class="page" loaded="loaded">

    <Page.actionBar>
        <ActionBar title="My App" icon="" class="action-bar">
        </ActionBar>
    </Page.actionBar>

    <StackLayout class="p-20">

 <SearchBar id="searchBar" hint="Search" text="" clear="onClear" submit="onSubmit" />
<TabView>
   <TabView.items>
     <TabViewItem title="register">
       <TabViewItem.view>
           <ListView items="{{shows}}" tap="getInfo" >

            <ListView.itemTemplate>
                <Label text="{{name}}" />

            </ListView.itemTemplate>

       </ListView>
       </TabViewItem.view>
     </TabViewItem>
     <TabViewItem title="Tab 2">
       <TabViewItem.view>
          <Label text="Label in Tab2" />
       </TabViewItem.view>
     </TabViewItem>
   </TabView.items>
 </TabView>

    </StackLayout>
</Page>

详细信息如下:

注册详情-model.js

    viewModel.shows = [
        {name:"Reg01"},
        {name:"Reg02"},
        {name:"Reg03"},
        {name:"Reg04"},
        {name:"Reg05"},

    ];
    return gotData;

}

exports.pageLoaded = pageLoaded;

注册详细信息.js:

var gotData;
function pageLoaded(args) {
     var page = args.object;
     gotData = page.navigationContext.info;
     page.bindingContext={passedData:gotData}
    }

    exports.pageLoaded = pageLoaded;

注册详细信息.xml:

 <Page xmlns="http://schemas.nativescript.org/tns.xsd" navigatingTo="onNavigatingTo" class="page" loaded="pageLoaded">

        <Page.actionBar>
            <ActionBar title="Register" icon="" class="action-bar">
            </ActionBar>
        </Page.actionBar>

        <StackLayout >
                    <Label text="{{name}}"  />
        </StackLayout>
    </Page>

但是当我单击任何项​​目时,我会转到注册详细信息,但页面中没有显示数据,并且我在控制台中收到此消息错误:

JS: Binding: Property: 'name' is invalid or does not exist. SourceProperty: 'name'

有什么帮助吗?


我们可以在您的代码中解决一些问题。

  • use itemTap对于您的列表视图项目
  • 简化上下文的传递和使用console.log(contextValue)当不确定您作为对象传递的内容时。

例如,这里是代码的重构版本,它遵循这两个规则,只是为了演示如何处理传递上下文。

主页.xml

<Page xmlns="http://schemas.nativescript.org/tns.xsd" navigatingTo="onNavigatingTo" class="page" loaded="loaded">
    <StackLayout class="p-20">
        <SearchBar id="searchBar" hint="Search" text="" clear="onClear" submit="onSubmit" />
        <TabView>
            <TabView.items>
                <TabViewItem title="register">
                    <TabViewItem.view>
                        <ListView items="{{ shows }}" itemTap="getInfo" >
                            <ListView.itemTemplate>
                                <Label text="{{ name }}" />
                            </ListView.itemTemplate>
                        </ListView>
                    </TabViewItem.view>
                </TabViewItem>
                <TabViewItem title="Tab 2">
                    <TabViewItem.view>
                        <Label text="Label in Tab2" />
                    </TabViewItem.view>
                </TabViewItem>
            </TabView.items>
        </TabView>
    </StackLayout>
</Page>

主页.js

var RegisterViewModel = require("./main-view-model").RegisterViewModel;
var frameModule = require('ui/frame');

var viewModel = new RegisterViewModel();

exports.getInfo = function (args) {

    var info = args.view.bindingContext;
    console.log(info); // [Object object]
    console.log(info["name"]); // e.g. info["name"] === "Reg4"
    // info is Object of type { name: "Reg4" }

    var navigationEntry = {
        moduleName: "RegisterDetails",
        context: { name: info["name"] }
    }
    frameModule.topmost().navigate(navigationEntry);
}

exports.loaded = function (args) {
    args.object.bindingContext = viewModel;
}

主视图模型.js

var Observable = require("data/observable").Observable;

function RegisterViewModel() {
    var viewModel = new Observable();
    viewModel.shows = [
        { name: "Reg1" },
        { name: "Reg2" },
        { name: "Reg3" },
        { name: "Reg4" },
        { name: "Reg5" },
    ];

    return viewModel;
}
exports.RegisterViewModel = RegisterViewModel;

注册详细信息.xml:

 <Page xmlns="http://schemas.nativescript.org/tns.xsd" navigatingTo="onNavigatingTo" class="page" loaded="pageLoaded">
    <StackLayout>
        <Label text="{{ passedData.name }}" />
    </StackLayout>
</Page>

注册详细信息.js:

function pageLoaded(args) {
    var page = args.object;
    var receivedContext = page.navigationContext;

    console.log(receivedContext); // receiving object like { name : "Reg3"} here  e.g. receivedContext === { name: "Reg3"}

    page.bindingContext = { passedData: receivedContext }; // now the binding context is passedData.name
}

exports.pageLoaded = pageLoaded;

可以找到完整的演示应用程序here https://github.com/NickIliev/NS-Issues/tree/master/stackoverflow/tappedContext

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何获取点击列表项的上下文以在 Nativescript 中的另一个页面中显示详细信息 的相关文章

随机推荐

  • Python 中的快速简单的文件对话框?

    我有一个简单的脚本 它解析文件并将其内容加载到数据库中 我不需要 UI 但现在我提示用户使用以下命令解析文件raw input这是最不友好的 特别是因为用户无法复制 粘贴路径 我想要一种快速简便的方法来向用户呈现文件选择对话框 他们可以选择
  • ExpandableListView 组项上的 Android LongClickListener

    我在本教程的帮助下创建了一个 ExpandableListView link http blog csdn net avenleft article details 7192972 我或多或少地理解了代码 并尝试在组上设置一个 longcl
  • 如何知道事务方案何时可序列化?

    我正在研究SQL 需要知道某个事务方案是否可序列化 我理解确定这一点的方法是制作一个以事务作为节点和节点之间的方向的图 如果该图是循环的 则该方案不可序列化 但这是什么意思以及什么决定了图中是否存在从一笔交易到另一笔交易的有向边 在这种情况
  • USE_CREDENTIALS 在新的 Android M API 中不可用

    在尝试新的权限 API 时 值得注意的是 ActivityCompat checkSelfPermission ActivityCompat shouldShowRequestPermissionRationale ActivityComp
  • 从 C 创建一个实现 __dict__ 的 Python 类型?

    如何创建一个类型以具有 dict 按照 正常 类的说法 它是在 Python 中定义的吗 是否有任何非动态类型的示例 dict s 通过 Python 定义类型通过 有一个tp dict成员PyTypeObject 但我找不到有关如何使用它
  • 如何在根视图中隐藏导航控制器?

    请帮助我在根视图中隐藏导航控制器 我找到了写的解决方案 navigationController setNavigationBarHidden YES 在我需要的每个视图控制器中 好吧 它可以工作 但只是第一次 我运行应用程序 在根视图中我
  • JMSTemplate 检查主题是否存在并获取订阅者数量

    我一直在寻找一些文档 示例来检查动态创建的主题是否存在 如果存在 如何获取该主题的订阅者计数 我使用以下代码向主题发送消息 jmsTemplate send destination new MessageCreator Override p
  • 在不同数组中添加不同部分的选定单元格,UICollectionView

    我想添加选定的单元格UICollectionView在数组中 按部分划分在不同的数组中 意味着每个部分有不同的数组 问题是部分的数量是动态的 下面是我的代码 void collectionView UICollectionView coll
  • 关于纯头文件 C++ 库使用情况的可量化指标(基准)

    我试图用 SO 找到这个问题的答案 有很多问题列出了在 c 中构建仅头文件库的各种优缺点 但我还没有找到一个以可量化的方式做到这一点的问题 那么 从可量化的角度来看 使用传统上分离的 C 头文件和实现文件与仅使用头文件有什么不同 为简单起见
  • FlashDevelop - 为什么代码完成不适用于 mx.controls

    今天是我使用 Flex 和 FlashDevelop 的第一天 在我的 ActionScript 文件中 有这一行 import flash display SimpleButton FlashDevelop 意识到了这一点并且代码完成工作
  • Plone:升级 jQuery

    在 Plone 4 1 中使用 jQuery SlickGrid 插件并尝试调整网格列的大小会出错这个 jQuery 1 4 4 错误 http bugs jquery com ticket 7500 该问题已在较新的版本中得到修复 是否可
  • iOS 6 中 UIPickerView 选择行崩溃

    我的应用程序在 iOS 5 x 中完美构建和运行 但当我调用时它崩溃了selectRow inComponent animated 的方法UIPickerView在 iOS 6 中 code pickerview selectRow 1 i
  • 如何求这4个正方形的外角坐标? (如果图像旋转,形态闭/开不会保留正方形)

    我正在编码的工具中的第一个处理步骤是找到4个大黑色方块的外角坐标 然后 它们将用于进行单应变换 以便校正图像 取消旋转图像 也称为透视变换 最终获得矩形图像 这是 旋转和嘈杂 输入的示例 下载链接在这里 https i stack imgu
  • 邮差喷气背包 - 测试嵌套数据

    我在邮递员中进行了测试 并且响应返回了 嵌套 数据 我的意思是我们有响应的 数据 部分和 消息 部分 内部数据还有大量其他字段 这些字段是我需要使用 Jetpack 进行验证的字段 我怎样才能到达这些领域 JSON 响应如下所示 Data
  • Asp.net mvc 3 - 自定义模型绑定

    我有一个这样的模型 public string Name get set public IEnumerable
  • 意外返回匿名结构

    我正在尝试实现一种方法 该方法返回基于原始结构的修改后的结构 例如 type Project struct Username string Id uint Alias string Data json RawMessage Scheme S
  • Assert() - 它有什么用?

    我不明白的目的assert 我的讲师说断言的目的是发现错误 例如 double divide int a int b assert 0 b return a b 上述断言有道理吗 我认为答案是肯定的 因为如果我的程序 不应该与0 数字零 但
  • Karate 0.9.5:无法在并行执行中获取命令行选项

    我正在尝试将我的项目更新到最新的空手道版本 0 9 5 除了并行执行之外 一切正常 它没有考虑我使用命令行 Dkarate options 运行的标签 这是我的 TestParallel java 类 public class QaaTes
  • 我们可以将 XPath 与 BeautifulSoup 一起使用吗?

    我正在使用 BeautifulSoup 抓取 URL 并使用以下代码来查找td其类别为的标签 empformbody import urllib import urllib2 from BeautifulSoup import Beauti
  • 如何获取点击列表项的上下文以在 Nativescript 中的另一个页面中显示详细信息

    我正在尝试创建一个列表视图来显示硬编码数组列表中的数据及其工作良好 但我需要使用户能够单击任何项 目以在另一个页面中显示该项目的详细信息 我该怎么做 我尝试创建另一个数组来获取详细信息 并使 BindingContext 及其工作正常 但在