PageRenderTime 29ms CodeModel.GetById 1ms RepoModel.GetById 1ms app.codeStats 0ms

/Src/WS.EKA.Portal/Scripts/models/order/address.js

http://mobileshop.codeplex.com
JavaScript | 290 lines | 267 code | 23 blank | 0 comment | 71 complexity | bd60fc8856205374415b7df78d9fb4ed MD5 | raw file
Possible License(s): Apache-2.0, BSD-3-Clause
  1. window.Address = Backbone.Model.extend({
  2. urlRoot: 'api/address/',
  3. url: function () {
  4. return this.urlRoot;
  5. }
  6. });
  7. window.City = Backbone.Model.extend({
  8. OrderID: '',
  9. Name: '',
  10. Checked: false
  11. });
  12. window.CityList = Backbone.Collection.extend({
  13. model: City,
  14. urlRoot: 'api/province/',
  15. url: function () {
  16. return this.urlRoot;
  17. }
  18. });
  19. window.AddressList = Backbone.Collection.extend({
  20. model: Address,
  21. urlRoot: 'api/address/',
  22. url: function () {
  23. return this.urlRoot + pageView.getCookieValue('uid');
  24. }
  25. });
  26. window.AddressListView = Backbone.View.extend({
  27. el: '#jqt',
  28. initialize: function () {
  29. this.template = $('#AddressListTemplate').html();
  30. this.addressList = new AddressList();
  31. this.cityList = new CityList();
  32. },
  33. events: {
  34. 'click #AddressList #AddressSubmit': 'saveAddressChange',
  35. 'click #hideAddressList ul li': 'changeAddressDetail'
  36. },
  37. render: function () {
  38. var partial = { header: $('#HeaderTemplate').html(), footer: $('#FooterTemplate').html(),
  39. innerFooter: $('#InnerFooterTemplate').html()
  40. };
  41. var data = { hasBack: true, title: "??", btnListR: [{ name: 'home'}] };
  42. this.$el.append(Mustache.render(this.template, data, partial));
  43. var that = this;
  44. if ($('#hideAddressList').length > 0) {
  45. $('#AddressList .addresslist').html($('#hideAddressList').show());
  46. this.setAddressDetail();
  47. pageView.resizeScroll();
  48. } else {
  49. this.fetchAddressList();
  50. }
  51. return this;
  52. },
  53. fetchAddressList: function () {
  54. var that = this;
  55. this.addressList.fetch({
  56. success: function () {
  57. var template = $('#AddressListContentTemplate').html();
  58. $('#AddressList .addresslist').html(Mustache.render(template, { addressList: that.addressList.toJSON() }, []));
  59. $('#hideAddressList').show();
  60. var addressid = localStorage.getItem('addressid');
  61. if (addressid && addressid != '-1') {
  62. $('#hideAddressList ul[addressid="' + addressid + '"] input').attr('checked', 'checked');
  63. } else {
  64. $('#hideAddressList ul:first-child input').attr('checked', 'checked');
  65. }
  66. that.setAddressDetail();
  67. pageView.resizeScroll();
  68. }
  69. });
  70. },
  71. setAddressDetail: function (target) {
  72. var radio = target || $('#AddressList input[type="radio"]:checked');
  73. var element = radio.closest('ul');
  74. var data = {
  75. recivename: element.attr('recivename'),
  76. address: element.attr('address'),
  77. mobile: element.attr('mobile'),
  78. postcode: element.attr('postcode'),
  79. email: element.attr('email'),
  80. tel: element.attr('tel')
  81. };
  82. var template = $('#AddressDetailContentTemplate').html();
  83. $('#AddressList .addressDetail').html(Mustache.render(template, data, []));
  84. var codes = this.getParentRegionCode(element.attr('regionCode'));
  85. this.fetchProvinceList(codes);
  86. pageView.resizeScroll();
  87. },
  88. getParentRegionCode: function (code) {
  89. var codes = [];
  90. $.ajax({
  91. url: 'api/region/parentcode/get/',
  92. type: 'GET',
  93. data: { childCode: code },
  94. async: false,
  95. success: function (res) {
  96. if (res != "") {
  97. codes = res.split(',');
  98. }
  99. }
  100. });
  101. return codes;
  102. },
  103. fetchProvinceList: function (codes) {
  104. var that = this;
  105. var selectedCode = codes[0] || '';
  106. var provinces_local = localStorage.getItem('provinces');
  107. if (provinces_local == null || provinces_local == '[]') {
  108. this.cityList.fetch({
  109. success: function () {
  110. var template = $('#CitySelectTemplate').html();
  111. _.each(that.cityList.toArray(), function (city) { if (city.get('Code') == selectedCode) city.set('Checked', true);});
  112. localStorage.setItem('provinces', JSON.stringify(that.cityList.toJSON()));
  113. var data = { city: that.cityList.toJSON() };
  114. $('select#address_province').html(Mustache.render(template, data, []));
  115. var orderid = $('select#address_province').val();
  116. that.fetchCityList(orderid, codes);
  117. }
  118. });
  119. } else {
  120. var template = $('#CitySelectTemplate').html();
  121. var citys = JSON.parse(provinces_local);
  122. _.each(citys, function (city) {
  123. city.Checked = false;
  124. if (city['Code'] == selectedCode) city.Checked = true;
  125. });
  126. localStorage.setItem('provinces', JSON.stringify(citys));
  127. var data = { city: JSON.parse(localStorage.getItem('provinces')) };
  128. $('select#address_province').html(Mustache.render(template, data, []));
  129. var orderid = $('select#address_province').val();
  130. that.fetchCityList(orderid, codes);
  131. }
  132. $('select#address_province').bind('change', function () {
  133. $('li.address_area').hide();
  134. var orderid = $(this).val();
  135. that.fetchCityList(orderid, codes);
  136. });
  137. },
  138. fetchCityList: function (orderid, codes) {
  139. var that = this;
  140. var selectedCode = codes[1] || '';
  141. this.cityList.url = 'api/region/' + (orderid || 0);
  142. this.cityList.fetch({
  143. success: function () {
  144. var template = $('#CitySelectTemplate').html();
  145. _.each(that.cityList.toArray(), function (city) {
  146. if (city.get('Code') == selectedCode) city.set('Checked', true);
  147. });
  148. var data = { city: that.cityList.toJSON() };
  149. $('select#address_city').html(Mustache.render(template, data, []));
  150. $('li.address_city').show();
  151. var orderid = $('select#address_city').val();
  152. that.fetchAreaList(orderid, codes);
  153. pageView.resizeScroll();
  154. }
  155. });
  156. $('select#address_city').bind('change', function () {
  157. var orderid = $(this).val();
  158. that.fetchAreaList(orderid, codes);
  159. });
  160. },
  161. fetchAreaList: function (orderid, codes) {
  162. var that = this;
  163. var selectedCode = codes[2] || '';
  164. this.cityList.url = 'api/region/' + (orderid || 0);
  165. this.cityList.fetch({
  166. success: function () {
  167. var template = $('#CitySelectTemplate').html();
  168. _.each(that.cityList.toArray(), function (city) {
  169. if (city.get('Code') == selectedCode) city.set('Checked', true);
  170. });
  171. var data = { city: that.cityList.toJSON() };
  172. $('select#address_area').html(Mustache.render(template, data, []));
  173. $('li.address_area').show();
  174. pageView.resizeScroll();
  175. }
  176. });
  177. },
  178. changeAddressDetail: function (e) {
  179. var target = $(e.currentTarget);
  180. this.setAddressDetail(target.find('input[type="radio"]'));
  181. pageView.resizeScroll();
  182. },
  183. validation: function () {
  184. $('#where_error').text(''); $('#name_error').text(''); $('#mobile_error').text('');
  185. $('#tel_error').text(''); $('#email_error').text(''); $('#postcode_error').text('');
  186. var flag = true,
  187. address = $('#address_where').val(),
  188. recivename = $('#address_name').val(),
  189. email = $('#address_email').val(),
  190. tel = $('#address_tel').val(),
  191. postcode = $('#address_zip').val(),
  192. mobile = $('#address_mobile').val();
  193. if (address == "") { $('#where_error').text('??????'); flag = false; }
  194. if (recivename == "") { $('#name_error').text('???????'); flag = false; }
  195. if (mobile == "") { $('#mobile_error').text('????????'); flag = false; }
  196. if (mobile != "" && (!(/^0{0,1}(1)[0-9]{10}$/.test(mobile)))) { $('#mobile_error').text('????????'); flag = false; }
  197. if (tel != "" && (!(/^\d{11}$/.test(tel)))) { $('#tel_error').text('????????11???'); flag = false; }
  198. if (email == "") { $('#email_error').text('Email????'); flag = false; }
  199. if (email != "" && !(/^[a-zA-Z0-9]+@[a-zA-Z0-9]+.[a-z][a-z.]{2,8}$/.test(email))) { $('#email_error').text('Email????'); flag = false; }
  200. if (postcode != "" && !/^[1-9]\d{5}$/.test(postcode)) { $('#postcode_error').text('????????'); flag = false; }
  201. return flag;
  202. },
  203. isChanged: function () {
  204. var address = $('#address_where').val().trim(),
  205. email = $('#address_email').val().trim(),
  206. postcode = $('#address_zip').val().trim(),
  207. recivename = $('#address_name').val().trim(),
  208. tel = $('#address_tel').val().trim(),
  209. mobile = $('#address_mobile').val().trim();
  210. var addressOrigin = $('#address_where').attr('originvalue').trim(),
  211. emailOrigin = $('#address_email').attr('originvalue').trim(),
  212. postcodeOrigin = $('#address_zip').attr('originvalue').trim(),
  213. recivenameOrigin = $('#address_name').attr('originvalue').trim(),
  214. telOrigin = $('#address_tel').attr('originvalue').trim(),
  215. mobileOrigin = $('#address_mobile').attr('originvalue').trim();
  216. if (address == addressOrigin && email == emailOrigin && postcode == postcodeOrigin && recivename == recivenameOrigin && mobile == mobileOrigin && tel == telOrigin) {
  217. return false;
  218. }
  219. return true;
  220. },
  221. saveAddressChange: function () {
  222. if (this.validation()) {
  223. var regionCode = $('select#address_area option:selected').attr('addressCode');
  224. if (!regionCode) { alert('???????????????!'); return; }
  225. var newaddress = new Address();
  226. newaddress.set({
  227. NAME: $('#address_name').val().trim(),
  228. Email: $('#address_email').val().trim(),
  229. Address: $('#address_where').val().trim(),
  230. Postalcode: $('#address_zip').val().trim(),
  231. Mobile: $('#address_mobile').val().trim(),
  232. Tel: $('#address_tel').val().trim(),
  233. Code: regionCode
  234. });
  235. if (this.isChanged()) {
  236. newaddress.save('', '', {
  237. success: function (model, res) {
  238. if (res && res == 201) {
  239. pageView.goBack();
  240. } else {
  241. pageView.goTo('ErrorPage');
  242. }
  243. localStorage.setItem('addressid', -1);
  244. localStorage.setItem('addressItem', JSON.stringify(newaddress));
  245. }
  246. });
  247. } else {
  248. var target = $('#AddressList input[type="radio"]:checked');
  249. localStorage.setItem('addressid', target.closest('ul').attr('addressid'));
  250. localStorage.setItem('addressItem', JSON.stringify(newaddress));
  251. pageView.goBack();
  252. }
  253. localStorage.setItem('regionCode', regionCode);
  254. }
  255. }
  256. }, {
  257. renderList: function (list) {
  258. var template = $('#AddressListContentTemplate').html();
  259. $('#OrderMake').append(Mustache.render(template, { addressList: list }, []));
  260. var addressid = localStorage.getItem('addressid');
  261. if (addressid && addressid != '-1') {
  262. $('#hideAddressList ul[addressid="' + addressid + '"] input').attr('checked', 'checked');
  263. } else {
  264. $('#hideAddressList ul:first-child input').attr('checked', 'checked');
  265. }
  266. }
  267. });