Резюме
Продолжая нашу дискуссию вокруг ASP.Net MVC4 Mobile application, это окончательное сообщение будет обсуждать заключительную часть, пользовательского интерфейса и, как все это идет вместе.
Пользовательский интерфейс
По умолчанию проект использует JQuery Mobile плагин для таргетинг на мобильные устройства.Плагин JQuery Mobile сенсорный оптимизирован для смартфонов и планшетов и целей IOS, Android, Blackberry, Bada, Windows Phone, Palm WebOS, Symbian и MeeGo.
Начнем с логикой JavaScript, который будет осуществлять взаимодействие пользовательского интерфейса HTML и JSON веб сервиса.
Скопируйте и вставьте следующий код в страницу Index
Продолжая нашу дискуссию вокруг ASP.Net MVC4 Mobile application, это окончательное сообщение будет обсуждать заключительную часть, пользовательского интерфейса и, как все это идет вместе.
Пользовательский интерфейс
По умолчанию проект использует JQuery Mobile плагин для таргетинг на мобильные устройства.Плагин JQuery Mobile сенсорный оптимизирован для смартфонов и планшетов и целей IOS, Android, Blackberry, Bada, Windows Phone, Palm WebOS, Symbian и MeeGo.
Начнем с логикой JavaScript, который будет осуществлять взаимодействие пользовательского интерфейса HTML и JSON веб сервиса.
- В папке Scripts, добавить папку с именем com, в эту папку добавить папку sukul, и наконец, добавить папку babyfeeding в sukul.
- В конечном папке babyfeeding, добавить файл JavaScript и назвать его proxy.js
- Скопируйте и вставьте следующий код в файл JS
if (Sukul == undefined) var Sukul; if (!Sukul) Sukul = {}; //Constructor Sukul.Proxy = function (siteBaseUrl) { // constructor Sukul.Proxy.prototype.baseUrl = siteBaseUrl; Sukul.Proxy.prototype.heartBeatUrl =
siteBaseUrl + "/Services/BabyMonitorService.svc/HeartBeat"; Sukul.Proxy.prototype.FeeedingUrl =
siteBaseUrl + "/Services/BabyMonitorService.svc/AddFeedingEntry" Sukul.Proxy.prototype.DiaperingUrl =
siteBaseUrl + "/Services/BabyMonitorService.svc/AddDiaperingEntry" } Sukul.Proxy.prototype = { CallWebService: function (url, input, successCallBack,
errorCallBack) { //Uncomment the next line to support JSONP //url = url + "?callback=?"; $.ajax({ async: false, cache: false, type: "GET", contentType: "application/json; charset=utf-8", url: url, dataType: "json", data: input, success: successCallBack, error: errorCallBack }); }, HeartBeat: function (successFunction, failFunction) { this.CallWebService(this.heartBeatUrl, "",
successFunction, failFunction); }, AddFeeding: function (UserId, FeedType, FeedAmount,
successFunction, failFunction) { var input = "UserId=" + UserId + "&FeedType=" +
FeedType + "&FeedAmount=" + FeedAmount; this.CallWebService(this.FeeedingUrl, input,
successFunction, failFunction); }, AddDiapering: function (UserId, DiaperType,
successFunction, failFunction) { var input = "UserId=" + UserId + "&DiaperType=" +
DiaperType; this.CallWebService(this.DiaperingUrl, input,
successFunction, failFunction); } };
- JavaScript структурирована для использования объектов и пространств имен. Каждый объект JavaScript содержит внутренний класс Prototype.
Определяя методы этого внутреннего класса, мы можем инкапсулировать
объект переменных и методов и обмениваться ими через конкретные
экземпляры класса. В коде выше, объект Proxy определяет следующие методы:
- CallWebService - вспомогательный метод для вызова службы JSON
- HearBeat - вызывает метода Heat для диагностики
- AddFeeding - создает канал вступление взяв ввод из формы и вызова веб-сервисов
- AddDiapering - создает запись для смены пеленок, взяв ввод из формы и вызова веб-сервисов
- Наконец, мы инкапсулировали объект Proxy внутри объекта Sukul для создания пространства имен, так что к объект Proxy можно ссылаться вот так: Sukul.Proxy
Скопируйте и вставьте следующий код в страницу Index
@{ ViewBag.Title = "Baby Log Home"; } <script type="text/javascript"> $(document).ready(function () { $("#btnSubmit").click(function () { $("#txtLastEntry").val("Last: "); // создание proxy class var proxy = new Sukul.Proxy("@Request.Url.GetLeftPart(
UriPartial.Authority)"); // добавление заспис feeding if ($("#chkFeed").attr("checked") != undefined &&
$("#chkFeed").attr("checked") == "checked") { proxy.AddFeeding("@Membership.GetUser().UserName",
$("#drpType").val(), $("#drpAmount").val(), function (result) { // успешно $("#txtLastEntry").val($("#txtLastEntry").val() +
$("#drpAmount option:selected").text() + " of " + $("#drpType option:selected").text()); }, function (jqXHR, textStatus, errorThrown) { // безуспешно var err = "Details: " + textStatus; if (errorThrown != undefined) { err += "\rMore details : " + errorThrown; } alert(err); }); } // добавление заспис diapering if ($("#chkDiaper").attr("checked") != undefined &&
$("#chkDiaper").attr("checked") == "checked") { proxy.AddDiapering("@Membership.GetUser().UserName",
$("#drpDiaper").val(), function (result) { // успешно $("#txtLastEntry").val($("#txtLastEntry").val()
+ ", " + $("#drpDiaper option:selected").text() + " diaper"); }, function (jqXHR, textStatus, errorThrown) { // безуспешно var err = "Details: " + textStatus; if (errorThrown != undefined) { err += "\rMore details : " + errorThrown; } alert(err); }); } }); }); </script> <div data-role="fieldcontain" data-inset="true"> <fieldset data-role="controlgroup"> <legend>Feed Details</legend> <input id='chkFeed' name='chkFeed-1' type="checkbox"
checked="checked" class="custom" /> <label for="chkFeed"> Log Feed</label> </fieldset> <fieldset data-role="controlgroup"> <legend>Feed Type:</legend> @Html.DropDownList("drpType", new List<SelectListItem> { new SelectListItem { Text="Bottle", Value="Bottle",
Selected=true }, new SelectListItem { Text="Left", Value="Left" }, new SelectListItem { Text="Right", Value="Right" }, }) </fieldset> <fieldset data-role="controlgroup"> <legend>Amount:</legend> @Html.DropDownList("drpAmount", new List<SelectListItem> { new SelectListItem { Text="0.5 oz.", Value="0_5" }, new SelectListItem { Text="1.0 oz.", Value="1_0" }, new SelectListItem { Text="1.5 oz.", Value="1_5" }, new SelectListItem { Text="2.0 oz.", Value="2_0" }, new SelectListItem { Text="2.5 oz.", Value="2_5", Selected=true }, new SelectListItem { Text="3.0 oz.", Value="3_0" }, new SelectListItem { Text="3.5 oz.", Value="3_5" }, new SelectListItem { Text="4.0 oz.", Value="4_0" }, new SelectListItem { Text="4.5 oz.", Value="4_5" }, new SelectListItem { Text="5.0 oz.", Value="5_0" }, new SelectListItem { Text="5.5 oz.", Value="5_5" }, new SelectListItem { Text="6.0 oz.", Value="6_0" }, new SelectListItem { Text="6.5 oz.", Value="6_5" }, new SelectListItem { Text="7.0 oz.", Value="7_0" }, new SelectListItem { Text="7.5 oz.", Value="7_5" }, new SelectListItem { Text="8.0 oz.", Value="8_0" }, new SelectListItem { Text="8.5 oz.", Value="8_5" }, new SelectListItem { Text="9.0 oz.", Value="9_0" } }) </fieldset> </div> <div data-role="fieldcontain" data-inset="true"> <fieldset data-role="controlgroup"> <legend>Diaper Details</legend> <input id='chkDiaper' name='chkDiaper-1' type="checkbox"
class="custom" /> <label for="chkDiaper"> Log Diaper</label> </fieldset> <fieldset data-role="controlgroup"> <legend>Diaper:</legend> @Html.DropDownList("drpDiaper", new List<SelectListItem> { new SelectListItem { Text="Wet", Value="wet", Selected=true }, new SelectListItem { Text="Dirty", Value="dirty" }, new SelectListItem { Text="Both", Value="both" } }) </fieldset> </div> <div data-role="fieldcontain" data-inset="true"> <input id="btnSubmit" type="submit" value="Submit" data-role="button" /> <fieldset data-role="controlgroup"> <input id="txtLastEntry" readonly="readonly" type="text" /> </fieldset> </div>HTML код создает форму ввода для ввода питания и детали смены пеленок и код JavaScript, собирает входные, создает класс Proxy и вызывает его методы для вызова веб-службы.
Жду ваши комментарии...