2016-11-29 78 views
1

使用Visual Studio 2015年行政長官和LightSwitch HTML客戶端重新渲染標籤後保存

我有四個屬性(嚴重,高,中,低)與Int的數據類型。我有另一個屬性(風險)與字符串的數據類型,我想更改基於四個Int屬性值的css顏色。

在ViewDetails屏幕中,我將字符串屬性Risk顯示爲標籤。當Int Int四個屬性中的一個發生變化並滿足特定條件時,我需要能夠更改標籤的顏色:.css("color", "red");。使用_postRender函數可以很好地設置初始顏色,但如果我打開編輯屏幕並修改值,Risk不會重新渲染。我如何去重新渲染風險?我試着在_postRender事件中爲這四個Int屬性中的每一個設置dataBind。我遇到的問題是參數中提供的_postRender事件不是風險標籤。其他任何嘗試我都沒有取得太大的成功。

回答

1

權,附加屏幕上我有下面的代碼:

/// <reference path="~/GeneratedArtifacts/viewModel.js" /> 

var cri; 
var hig; 
var med; 
var low; 

myapp.AddEditAlarm.created = function (screen) { 

    //GET THE VALUES ON THE ADD/EDIT SCREEN CREATION 
    cri = screen.Alarm.Critical; 
    hig = screen.Alarm.High; 
    med = screen.Alarm.Medium; 
    low = screen.Alarm.Low; 


}; 
myapp.AddEditAlarm.Save_execute = function (screen) { 

    if (screen.Alarm.AlarmStatus == null) { 
     //NEW ALARM STATUS 
     screen.Alarm.AlarmStatus = 0; 
     //WHATEVER YOU WANT TO SET IT AS HERE 
    } 
    else { 
     //HAS IT CHANGED? 
     if (screen.Alarm.Critical == cri) { 
      //VALUE CHANGED 
      screen.Alarm.AlarmStatus = screen.Alarm.Critical; 
     } 
     else if (screen.Alarm.High == hig) { 
      //VALUE CHANGED 
      screen.Alarm.AlarmStatus = screen.Alarm.High; 
     } 
     else if (screen.Alarm.Medium == med) { 
      //VALUE CHANGED 
      screen.Alarm.AlarmStatus = screen.Alarm.Medium; 
     } 
     else if (screen.Alarm.Low == low) { 
      //VALUE CHANGED 
      screen.Alarm.AlarmStatus = screen.Alarm.Low; 
     } 
    } 

    myapp.commitChanges(); 
}; 

我宣佈4個變量,是在兩個自定義的保存按鈕,創建的事件進行訪問。在屏幕創建時,我將這4個變量設置爲4個鬧鐘的當前值。

如果這些改變,那麼AlarmStatus的值會改變。目前我已經把它放在if,else if語句中,僅用於測試目的。現在,當您單擊保存時,如果沒有更改,顏色不會更改。如果任何4個報警值,然後更改數據綁定將視圖屏幕上使用下面的代碼被擊中:

myapp.ViewAlarm.AlarmStatus_postRender = function (element, contentItem) { 
    contentItem.dataBind("value", function (value) { 

     var critical = contentItem.screen.Alarm.Critical; 
     var high = contentItem.screen.Alarm.High; 
     var medium = contentItem.screen.Alarm.Medium; 
     var low = contentItem.screen.Alarm.Low; 

     element.style.fontWeight = 'bold'; 
     element.style.fontSize = "18px"; 

     if (critical == 50 || high == 50 || medium == 50 || low == 50) { 
      element.style.background = "RED"; //CRITICAL 
      //element.style.opacity = 0.4; 
      element.style.color = "white"; 
      element.innerText = "Critical"; 
     } 
     else if (contentItem.value == 2) { 
      element.style.background = "ORANGE"; //HIGH 
      //element.style.opacity = 0.4; 
      element.style.color = "black"; 
      element.innerText = "High"; 
     } 
     else if (contentItem.value == 3) { 
      element.style.background = "YELLOW"; //MEDIUM 
      //element.style.opacity = 0.4; 
      element.style.color = "black"; 
      element.innerText = "Medium"; 
     } 
     else if (contentItem.value == 4) { 
      element.style.background = "GREEN"; //LOW 
      // element.style.opacity = 0.4; 
      element.style.color = "white"; 
      element.innerText = "Low"; 
     } 
     else { 
      //WAIT FOR OPTION 
     } 
    }); 
}; 

現在我已經設置,如果任何一個值,在第一個if語句等於50,然後設置警報狀態爲CRITICAL。現在我已經把其他人當作2,3,4了。我不知道你是否想要一個範圍,或者只同時使用4個報警值中的一個,但是如果任何一個值發生變化,這個方法就可以工作。

+0

在你的條件下,你有contentItem.value。我需要測試四個int屬性(Critical,High,Medium,Low)的條件。例如:如果我有一個值爲「50」的Critical,我需要將標籤更改爲一種顏色。如果高和中都是x值,則需要使用另一種顏色。如何去測試這些條件?如果「screen.findContentItem」對象對我可用,我會使用它,但它不是。 – HiTech

+0

更新 - 我打算刪除我的評論,但我認爲這對其他人有幫助。爲了訪問與contentItem相同的數據集中的其他數據。你可以使用「contentItem.parent.data.propertyName」 – HiTech

+0

contentItem.value指的是報警值,所以如果你將它設置爲50,那麼你會在上面寫(contentItem.value == 50)。這4個值是指一個文本框還是4個單獨的文本框?如果有4個文本框,則會觸發故障標籤?我將在明天與這場比賽取得聯繫,並回到你身邊,即時在英國,讓你知道GMT – Crezzer7