将自定义屏幕导航编码为 Lightswitch HTML

Coding custom Screen Navigation into Lightswitch HTML

本文关键字:Lightswitch HTML 编码 导航 自定义 屏幕      更新时间:2023-09-26

我希望LS HTML中的按钮操作事件稍微违背内置导航框架。

具体而言,让 LS 自动从一个 AddEditScreen 导航到另一个 AddEditScreen,由此按钮事件触发。

诀窍是这样的 - 我需要它导航到浏览屏幕列表中"下一个项目"的 AddEditScreen ,而无需返回浏览屏幕。

例:

在浏览屏幕上选择项目"ABC01">导航到"ABC01"的添加编辑屏幕>编辑"ABC01">完成编辑后,触发一个事件,使 LS 能够直接从"浏览屏幕"列表中导航到"ABC02"的添加编辑屏幕。

我对那个事件可能是什么持开放态度。一个按钮...什么都行。

我创建了一个按钮并选择了"编写自己的方法"。

这看起来是否接近将起作用的代码,或者LS需要从某种类型的查询中获取"ABC01"的值?

myapp.AddEditHoldingInventory.Method_execute = function (screen) {
// Write code here.
var navigateToNextScreen = function (Method) {
        return screen.getStrRqsNum().then(function (StrRqsNum) {
            if (!!StrRqsNum) {
                return myapp.applyChanges().then(function () {
                    var paramValue = (Number(StrRqsNum) += 1).toString();
                            return myapp.ShowAddEditHoldingInventory(id);
                        }
                    });
                });
            }

上面的代码是我修改的,我不是程序员或开发人员。它是我收集并试图理解的片段。

代码"悲惨地"试图实现的是:

获取 StrRqsNumber 的值>

保存屏幕上所做的编辑>将 +1 添加到 StrRqsNumber 的值>导航到具有新值的记录的 AddEditSCreen。

StrRqsNumber = 带有值的列。它是唯一的,用于标识资产。这很可能不是实现我想要实现的目标的最佳方式,所以我在这里寻求建议。我不必使用它作为参数,只要我可以从列表中点击"下一项"。

非常感谢您的任何意见。我会非常兴奋地让这种行为发挥作用。

这个问题由joshbooker解决。这是解决方案,只需要最少的项目特定定制...

"问题投票为有帮助0投票我想要实现的是这个,例如:

浏览屏幕> 在列表中选择第 1 项(共 15 项),>扫描我们在 AddEditScreen 上需要的第 1 项信息,以查找第 1 项>点击"触发器",并让 LS 自动保存该编辑,然后导航到第 2 项(共 15 项>)的 AddEditScreen,依此类推。

这是一个有效的解决方案:

/// <reference path="~/GeneratedArtifacts/viewModel.js" />
myapp.BrowseHoldingInventories.selectNextStrRqsNum_execute = function (screen)
{///custom screen method to set selected item to next StrRqsNum
    //calc next num
    var nextNum = (Number(screen.HoldingInventories.selectedItem.StrRqsNum) + 1).toString();
    // iterate collection data to find the next item
    var nextItem = msls.iterate(screen.HoldingInventories.data)
                        .where(function (i)
                        {
                            return i.StrRqsNum == nextNum;
                        }).first();
    if (nextItem)
    {   //if found - select the item & return true
        screen.HoldingInventories.selectedItem = nextItem;
        return true;
    }
    else
    {   //not found - return false
        return false;
    };
};
myapp.BrowseHoldingInventories.TapMethod_execute = function (screen) {
    // tap method of list item on browse screen.
    //handy way to save/set scroll position
    var scrollTopPosition = $(window).scrollTop();
    //currently selected item
    var item = screen.HoldingInventories.selectedItem;
    //showAddEditScreen - pass item
           // beforeShown: setup binding on FieldB
            //afterClosed: if commit & select next then recurse
    myapp.showAddEditHoldingInventory(item, {
        beforeShown: function (addEditScreen)
        {//this executes before the screen is shown
            //find the trigger field
            var contentItem = addEditScreen.findContentItem("FieldB");
            if (contentItem)
            {   //databind to catch value change
                contentItem.dataBind(contentItem.bindingPath, function(newValue){
                    if (newValue && contentItem.oldValue && newValue != contentItem.oldValue)
                    {   //if change then commit - this triggers close of addEditScreen
                        myapp.commitChanges();
                    }
                    contentItem.oldValue = newValue;
                });
            }
        },
        afterClosed: function (addEditScreen, navigationAction)
        {//this executes after the screen is closed
            //scroll browse screen to where we left off
            $(window).scrollTop(scrollTopPosition);
            //if commit
            if (navigationAction == msls.NavigateBackAction.commit)
            {   //try to select next item in list
                if (myapp.BrowseHoldingInventories.selectNextStrRqsNum_execute(screen) == true)
                {   //next item selected then recurse
                    myapp.BrowseHoldingInventories.TapMethod_execute(screen);
                }
            }
        }
    });
};

"