JSPatch 동적 업데이트, 사례 분석
require('UIView, JPObject, HtmlAllViewController,DataManager,EMClient,EaseMessageViewController')
defineClass("GHAcceptOrderViewController", {
tableView_willSelectRowAtIndexPath: function(tableView, indexPath) {
var row = indexPath.row();
var dataArr = self.sourceArr().toJS();
var vo = dataArr[row];
if (vo.type() == 1 && vo.status() == 1) {
return null;
}
return indexPath;
},
})
defineClass("HomePageViewController", {
clickIndex: function(index) {
var data = self.valueForKey("homeVO");
var dataArr = data.banners().toJS();
if (dataArr&&dataArr.length>index) {
var vo = dataArr[index];
if (vo.type()) {
if (vo.type() == 2) {
self.recharge();
}
}
if(vo.linkUrl()&&vo.linkUrl().length()>6){
var ctrl = HtmlAllViewController.alloc().init();
var token = DataManager.getInstance().user().token();
var header = vo.linkUrl().toJS() + "?token=" + token.toJS();
ctrl.setValue_forKey(header,"mUrl");
ctrl.setValue_forKey(vo.name(),"mTitle");
self.navigationController().pushViewController_animated(ctrl,true);
}
}
},
onFloatImage: function(tap) {
var vo = DataManager.getInstance().user();
self.view().setUserInteractionEnabled(false);
var weakSelf = __weak(self);
var success = block(function(){
weakSelf.view().setUserInteractionEnabled(true);
var ctrl = EaseMessageViewController.alloc().initWithConversationChatter_conversationType("pinjian001",0);
var dict = require("NSMutableDictionary").alloc().init();
dict.setObject_forKey(" ", "senderName");
if(vo.avatar()){
dict.setObject_forKey(vo.avatar(), "senderAvatar");
}else{
dict.setObject_forKey("order_expert_desc_icon_bgImage.png", "senderAvatar");
}
dict.setObject_forKey(" ", "receiverName");
dict.setObject_forKey("doctor_defalt_icon.png", "receiverAvatar");
ctrl.setValue_forKey(" ","title");
ctrl.setValue_forKey(dict,"pinjian");
weakSelf.navigationController().pushViewController_animated(ctrl,true);
});
var failure = block("EMError *", function(aError){
weakSelf.view().setUserInteractionEnabled(true);
});
EMClient.sharedClient().asyncLoginWithUsername_password_success_failure(vo.hxUsername(),vo.hxPassword(),success,failure);
},
readMessage:function(notification){
self.tabBarItem().setBadgeValue(null);
self.showMessage(false);
},
})
특별히 설명해야 할 것은:
1.oc의 속성 접근은 js에서 반드시 통과해야 합니다.() 액세스,
2.oc의 데이터는 js단에서 호출됩니다. 반드시 통과해야 합니다.toJS()를 js 데이터 형식으로 변환하기;
3.oc의 block은 js 이쪽에 있습니다. 위 코드와 같이 참고 형식에 특히 주의하십시오.
4.oc의 block은 js단에서 호출됩니다. 약한 인용을 통해 수식해야 합니다. 그리고 block에서weakSelf를 사용해야 합니다. 위의 코드는 다음과 같습니다.
var weakSelf = __weak(self);
5. 사용된 헤더 파일은 반드시 require();
건의: 로컬 setup Development 디버깅을 먼저 하고, 디버깅이 성공한 후, 여러 번 오류가 없는지 검사한 후에 전역을 발표합니다.
또한 jspatch 단점 디버깅에 대해:https://github.com/bang590/JSPatch/wiki/JS-%E6%96%AD%E7%82%B9%E8%B0%83%E8%AF%95
자세한 내용:
http://www.jianshu.com/p/0cb81bf23d7a
http://blog.cnbang.net/works/2767/
http://www.cnblogs.com/dsxniubility/p/5080875.html
http://jspatch.com/
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.