【问题标题】:pass selected tableview row data from one window to next window in titanium将选定的 tableview 行数据从一个窗口传递到钛中的下一个窗口
【发布时间】:2014-04-26 09:46:01
【问题描述】:

我正在开发钛表视图。在这里,如果我选择了任何行,则需要将行值从一个窗口传递到下一个窗口。

但是从我的代码.,

我已成功获取表行列表。行数据也通过了。

但是我遇到了一个问题。,第一次单击一行意味着传递了空值。之后返回列表视图并单击另一行意味着先前选择的行 ID 被传递到下一个窗口。为什么我会遇到这个问题?这里有什么问题?请给我一个解决方案。

我使用下面的代码:

dataArray = [];

for(var i=0; i<json.length; i++){

    var row = Ti.UI.createTableViewRow({
        className: 'row',
        objName: 'row',
        folder_id:json[i].folder_id,
        layout : 'horizontal',
        touchEnabled: true,
        width: "100%",
        height: Ti.UI.SIZE,
    });

    row.add(Ti.UI.createLabel({
        text: json[i].folder_id,
        title: json[i].folder_id,
        left: 10,
        top: 5,
        width: 0,
        visible : false,
        font: { fontSize: '18dp' },
        color: '#040404',
        wordWrap: true,
        height: Ti.UI.SIZE,
        ellipsize: true
    }));

    row.add(Ti.UI.createLabel({
        text: json[i].folder_name,
        title: json[i].folder_name,
        left: 10,
        top: 5,
        width: 100,
        font: { fontSize: '18dp' },
        color: '#040404',
        wordWrap: true,
        height: Ti.UI.SIZE,
        ellipsize: true
    }));

    dataArray.push(row);

};                      

$.FoldertableView.setData(dataArray);

$.FoldertableView.addEventListener('click', function(e){
    Ti.API.info("folder_id"+ e.rowData.folder_id );
    var managereditfolder =Alloy.createController('editfolder').getView();
    Ti.App.Properties.setString("folder_id", e.rowData.folder_id);
    managereditfolder.open();  
});                                                 

editfolder.js

folder_id = Ti.App.Properties.getString("folder_id"); 
Ti.API.info("Edit Folder folder_id"+ folder_id );

这里得到如下输出:

folder_id 14 [WARN] : 为属性顶部指定的自动值无效 [INFO] : 编辑文件夹 folder_id null

folder_id 5 [WARN]:为属性顶部指定的自动值无效 [INFO] : 编辑文件夹 folder_id 14

请检查我的代码并给我一个解决方案

【问题讨论】:

    标签: javascript titanium titanium-alloy pass-data


    【解决方案1】:

    您无需将数据保存到Ti.App.Properties 即可将其传递给另一个视图控制器,您可以执行以下操作:


    将数据传递给您创建的控制器

    var managereditfolder = Alloy.createController('editfolder', { folderId: e.rowData.folder_id } ).getView();
    


    editfolder.js 中,您将收到文件夹 ID

    // This holds all the Objects you pass along when
    // creating the controller
    var args = arguments[0] || {};
    
    // Hence, your folderId is args.folderId
    Ti.API.debug( args.folderId );
    


    附言 不要忘记在你声明的任何新变量之前总是放一个var,否则你可能会遇到全局范围的问题!

    【讨论】:

      【解决方案2】:
      $.FoldertableView.addEventListener('click', function(e){
          Ti.API.info("folder_id"+ e.rowData.folder_id );
          var managereditfolder = Alloy.createController('editfolder').getView();
          managereditfolder.folder_id = e.rowData.folder_id;
          managereditfolder.open();  
      });
      

      editfolder.js 中,您可以通过

      轻松访问它
      $.editFolderWin.folder_id
      

      【讨论】:

      • 嗯,你测试过这个吗?在我看来,您将变量传递给视图而不是控制器......
      • 是的,我已经测试过了。这就像制作一个窗口的自定义属性。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-02
      • 1970-01-01
      相关资源
      最近更新 更多