日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

AppCan学习笔记

發(fā)布時(shí)間:2023/12/20 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 AppCan学习笔记 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

      • 前言
      • 對AppCan的MVVM的理解
          • 1 😂不要和我說??對象.對象.屬性
          • 2. 對MVVM的補(bǔ)充
          • 3. HTML的select標(biāo)簽與MVVM
      • AppCan IDE使用總結(jié)
          • 1. IDE的快捷鍵
          • 2. UI設(shè)計(jì)器的英文名稱和中文含義

前言

??因?yàn)楣ぷ餍枰?#xff0c;所以接觸到了AppCan。它是基于HTML5, CSS, JS技術(shù)的Hybird跨平臺移動(dòng)應(yīng)用開發(fā)工具。下面,我記錄一下學(xué)習(xí)心得。

??常用鏈接:

  • AppCan官方文檔 http://newdocx.appcan.cn/AppCan
  • AppCan使用到的 Backbone.js
    中文網(wǎng) https://www.backbonejs.com.cn/
    英文網(wǎng) https://backbonejs.org/

對AppCan的MVVM的理解

1 😂不要和我說??對象.對象.屬性

??AppCan不支持 data-bind=“MVVM控制器:對象.對象.屬性” 這種寫法,只支持data-bind=“MVVM控制器:屬性” 😂也就是說,不能有點(diǎn)兒,得手動(dòng)把深層的屬性提取出來!!!

??如果AppCan Service返回的json數(shù)據(jù)是下面這個(gè)樣子:

{country: {name: "China",continent: "Asia",capital: {name: "Beijing",longitude: "116.3E",latitude: "39.9N"}} }

??那么下面的數(shù)據(jù)綁定就不起作用:

<!-- 想在輸入框顯示中國首都 Beijing,但實(shí)現(xiàn)不了 --> <input 省略部分內(nèi)容 data-bind="value:country.capital.name">

??此時(shí),必須對assets/mvvm目錄下的js文件,做如下修改:

var Model_5hXEXP = new(MVVM.Model.extend({defaults: {"country": {"name": "China","continent": "Asia","capital": {"name": "Beijing","longitude": "116.3E","latitude": "39.9N"}}},initialize: function() {return;},parse: function(data) {return data;},validate: function(attrs, options) {return;},/*這里是重點(diǎn),在這里把 對象.對象.屬性 提取為 屬性*/computeds: {capital_name: {get:function () {var country = this.get('country');return country.capital.name;}}},sync: function(method, model, options) {switch (method) {case "create":break;case "update":break;case "patch":break;case "read":Service_iSFBF9.request({},options);break;case "delete":break;default:break;}} }))()

??然后,html頁面的數(shù)據(jù)綁定也要做如下修改:

<!-- 使用model的computeds里自定義的屬性來綁定 --> <input 省略部分內(nèi)容 data-bind="value:capital_name">
2. 對MVVM的補(bǔ)充

??使用AppCan IDE的UI設(shè)計(jì)器生成的代碼,不能直接實(shí)現(xiàn)MVVM,需要做一些補(bǔ)充。

??AppCan MVVM官方文檔 http://newdocx.appcan.cn/data-docking-interaction

??需要補(bǔ)充什么,我們以一個(gè)例子來說明。比如index.html中有一個(gè)輸入框:

<div class="bc-bg ub ub-ver ub-ac ub-con" data-control="FLEXBOXVER" id="ContentFlexVer_1K3ucY"><div class="uinput ub bc-border uba ub-ac" data-control="ICONINPUT" id="iconInput_SSrSmb"><!--輸入框,綁定的數(shù)據(jù)是capital_name--><input placeholder="" type="text" class="ub-f1" data-control-scope="iconInput_SSrSmb" data-bind="value:capital_name"></div> </div>

??assets/mvvm/index.js的內(nèi)容如下:

var Service_iSFBF9 = new MVVM.Service({pretreatment: function(data, option) {// 這里把請求參數(shù)由json對象,轉(zhuǎn)為json字符串return JSON.stringify(data);},dosuccess: function(data, option) {return data;},doerror: function(e, err, option) {return err;},validate: function(data, option) {// 根據(jù)響應(yīng)的data.status是否為ok,來判斷請求是否成功return data.status == 'ok' ? 0 : -1;},ajaxCall: function(data, option) {var self = this;appcan.request.ajax({url: "http://localhost:8080/country/showByCountryName",type: "POST",data: this.pretreatment(data, option),dataType: "json",contentType: "application/json",success: function(data) {var res = self.validate(data, option);// 這里的option,就是model里自定義的optionif (!res) option.success(self.dosuccess(data, option));else option.error(self.doerror(data, res, option));},error: function(e, err) {option.error(self.doerror(e, err, option));}});} });var Model_5hXEXP = new(MVVM.Model.extend({// model的默認(rèn)值defaults: {"data": {"country": {"name": "Canada","continent": "North America","capital": {"name": "Ottawa","longitude": "93.5W","latitude": "41.0N"}}},"status": "ok","msg": "success"},initialize: function() {return;},parse: function(data) {return data;},validate: function(attrs, options) {return;},computeds: {// 把深層的屬性提取出來capital_name: {get:function () {var data = this.get('data');return data.country.capital.name;}}},sync: function(method, model, options) {switch (method) {case "create":break;case "update":break;case "patch":break;case "read":// 請求參數(shù)var requestData = {"countryName": "China"};// 自定義的option操作var options = {success: function(data) {/*【重點(diǎn)】ajax請求成功后,把響應(yīng)的數(shù)據(jù),使用model.set()方法設(shè)置到model里不能直接使用model.屬性 = xxx 這種方式直接修改屬性的值,直接修改不會觸發(fā)change事件,這在Backbone.js的文檔中說的很清楚了。只有使用set()方法,才會觸發(fā)change事件*/Model_5hXEXP.set("data", data.data);},error: function(e) {console.log('model sync read error is ...');console.log(e);}};// 手動(dòng)調(diào)用 ajaxService_iSFBF9.ajaxCall(requestData, options);break;case "delete":break;default:break;}} }))();var ViewModel_xxFVnD = new(MVVM.ViewModel.extend({el: "#ContentFlexVer_1K3ucY",events: {},initialize: function() {// ViewModel初始化時(shí),向后端請求數(shù)據(jù),改變modelthis.model.sync("read");return;},model: Model_5hXEXP, }))();
3. HTML的select標(biāo)簽與MVVM

??官網(wǎng)上沒有<select>標(biāo)簽數(shù)據(jù)綁定的例子。下面我補(bǔ)充一下,直接上例子吧。

??selectDemo.html局部:

<div class="select uba bc-border bc-text" data-control="SELECT" id="Select_tniRHJ"><div class="text"></div><div class="icon"></div><select selectedindex="0" data-control-scope="Select_tniRHJ" data-bind="for:data"><!--綁定的是城市編碼和城市名稱--><option data-bind="text:cityCode,value:cityName"></option></select> </div>

??assets/mvvm/selectDemo.js的內(nèi)容如下:

var Service_abcdef = new MVVM.Service({pretreatment: function(data, option) {// 把json格式請求參數(shù), 轉(zhuǎn)換成form-data形式return $.param(data);},dosuccess: function(data, option) {return data;},doerror: function(e, err, option) {return err;},validate: function(data, option) {return data.status == 'ok' ? 0 : -1;},ajaxCall: function(data, option) {var self = this;appcan.request.ajax({url: "http://localhost:8080/country/listCityByProvinceName",type: "GET",data: this.pretreatment(data, option),dataType: "json",contentType: "application/x-www-form-urlencoded",success: function(data) {var res = self.validate(data, option);if (!res) option.success(self.dosuccess(data, option));else option.error(self.doerror(data, res, option));},error: function(e, err) {option.error(self.doerror(e, err, option));}});} });var Model_abcdef = new(MVVM.Model.extend({defaults: {"data": [{"cityCode": 1,"cityName": "石家莊"},{"cityCode": 2,"cityName": "邢臺"}],"status": "ok","msg": "success"},initialize: function() {return;},parse: function(data) {return data;},validate: function(attrs, options) {return;},computeds: {},sync: function(method, model, options) {switch (method) {case "create":break;case "update":break;case "patch":break;case "read":console.log('model_abcdef sync running...');// 請求參數(shù)var requestData = {"province": "河北",};// 自定義的option操作var options = {success: function(data) {Model_abcdef.set("data", data.data);},error: function(e) {console.log('model sync read error is ...');console.log(e);}}Service_abcdef.ajaxCall(requestData, options);break;case "delete":break;default:break;}} }))();var ViewModel_abcdef = new(MVVM.ViewModel.extend({el: "#Select_tniRHJ",events: {},initialize: function() {console.log("ViewModel_abcdef is initializing ...");this.model.sync("read");return;},model: Model_abcdef }))();

AppCan IDE使用總結(jié)

1. IDE的快捷鍵
組合作用范圍含義
Ctrl + Shift + L全局顯示所有快捷鍵的定義
Ctrl + Shift + F文本編輯器頁面代碼格式化
Ctrl + F文本編輯器頁面查找內(nèi)容
Ctrl + Q + 2文本編輯器頁面回到光標(biāo)上次所在的位置
Alt + ?
或者
Alt + /
文本編輯器頁面智能提示
Ctrl + ←文本編輯器頁面離當(dāng)前光標(biāo)最近的前一個(gè)單詞
Ctrl + →文本編輯器頁面離當(dāng)前光標(biāo)最近的后一個(gè)單詞
Ctrl + D文本編輯器頁面刪除一行
Ctrl + Shift + Enter文本編輯器頁面在當(dāng)前行上面添加一行
Ctrl + Enter文本編輯器頁面在當(dāng)前行下面添加一行
Ctrl + Alt + ↓文本編輯器頁面向下復(fù)制一行
Alt + ↑文本編輯器頁面行向上移動(dòng)
Alt + ↓文本編輯器頁面行向下移動(dòng)
Ctrl + Shift + X文本編輯器頁面更改為大寫
Ctrl + Shift + Y文本編輯器頁面更改為小寫
2. UI設(shè)計(jì)器的英文名稱和中文含義

總結(jié)

以上是生活随笔為你收集整理的AppCan学习笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。