2016-01-21 4 views
0

Я хотел бы, чтобы событие Action Button в LS HTML немного отклонялось от встроенной системы навигации.Кодирование пользовательской экранной навигации в Lightswitch HTML

В частности, чтобы LS автоматически переместился с одного AddEditScreen на другой AddEditScreen, вызванный этим событием Button.

Хитрость в этом - мне нужно, чтобы перейти к экрану AddEditScreen «следующего элемента вверх» в списке экранов просмотра, не возвращаясь к экрану просмотра.

Пример:

Выберите пункт «ABC01» на Экране просмотра> Перейдите к AddEditScreen для «ABC01»> редактировать «ABC01»> После завершения редактирования, вызвать событие, которое позволит LS, чтобы перейти непосредственно к AddEditScreen для '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 = столбец со значением. Он уникален и идентифицирует актив. Это, скорее всего, НЕ лучший способ достичь того, чего я пытаюсь достичь, поэтому я здесь для совета. Мне не нужно использовать это как параметр, если я могу нажать «следующий элемент вверх» из списка.

Большое спасибо за любой ввод. Я буду ТАК, чтобы это поведение работало.

ответ

0

Эта проблема была решена joshbooker. Здесь было решение, которое требуется только минимальный проект конкретный крой ...

«Вопрос Голосуйте, как полезный Голосуйте То, что я хочу, чтобы достичь это, например:

Просмотр экрана> Выберите пункт 1 из 15 в списке> сканировать информацию, которая нам нужна на AddEditScreen для элемента 1>, нажать «триггер», и LS автоматически сохранить это редактирование, затем перейти к элементу AddEditScreen пункта 2 из 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); 
 
       } 
 
      } 
 
     } 
 
    }); 
 
};

"