【问题标题】:Coding custom Screen Navigation into Lightswitch HTML将自定义屏幕导航编码到 Lightswitch HTML
【发布时间】:2016-01-21 17:56:46
【问题描述】:

我想让 LS HTML 中的 Button 动作事件稍微违反内置导航框架。

具体来说,让 LS 自动从一个 AddEditScreen 导航到另一个 AddEditScreen,由此 Button 事件触发。

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

例子:

在浏览屏幕上选择项目“ABC01” > 导航到“ABC01”的 AddEditScreen > 编辑“ABC01” > 完成编辑后,触发一个事件,使 LS 能够直接导航到“ABC02”的 AddEditScreen ' 来自浏览屏幕列表。

我对那个事件可能是什么持开放态度。一个按钮......任何东西。

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

这看起来是否更接近可以工作的代码,或者 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);
                        }
                    });
                });
            }

上面的代码是我自己修改的,我不是程序员也不是开发者。这是我收集并试图理解的片段的sn-ps。

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

获取 StrRqsNumber 的值 > 保存在屏幕上所做的编辑 > 为 StrRqsNumber 的值添加 +1 > 导航到具有新值的记录的 AddEditScreen。

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

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

【问题讨论】:

    标签: javascript lightswitch-2013


    【解决方案1】:

    这个问题已经被 joshbooker 解决了。这是解决方案,只需要最少的项目特定剪裁......

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

    浏览屏幕 > 在列表中选择 15 项中的第 1 项 > 在 AddEditScreen 上为第 1 项扫描我们需要的信息 > 点击“触发器”,并让 LS 自动保存该编辑,然后导航到第 2 项的 AddEditScreen 15 > 等等。

    这是一个可行的解决方案:

    /// <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);
                    }
                }
            }
        });
    };

    "

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多