Wraecca 小學生技術筆記

動態更新dijit.Tooltip的connectId時抓不到id

dijit.Tooltip需要指定connectId來作為叫出tooltip的觸發id,想要動態改變觸發tooltip的目標dom如下所示,卻無法順利捕捉到新的connectId。

JS:


var tooltipNode = dijit.byId("tooltip");
tooltipNode.attr("connectId", "more");


HTML:
<div id="tooltip" dojotype="dijit.Tooltip" label="tip!!"></div>
<span id="cMHaobuIMg-shit">More</span>


結果把dojo從1.2.0升到1.3.1就沒事了。
此外,在1.2.0的環境下,如果id只有一個字元竟然就抓得到connectId!?

dojo.attr() 的ie錯誤

dojo.attr裡parse的屬性名稱,竟然無法處理class和for。class屬性改為className,for屬性則改為htmlFor。
詳情請參考這張票

Dojo Ajax更新頁面後dijit失效

在用dojo這個javascript library時,以ajax更新部份頁面後傳送回來html,其中包含dijit的部份卻無法正確顯示。這是因為dijit是在頁面載入完之後再parse整份文件來render各個widget,djConfig="parseOnLoad:true"就是在設定這件事,所以ajax傳回來的那份html當然也要給dojo來parse一下,此外每個dijit該有的require也不要忘了load-on-demand進來。

var formSubmit = function(e) {
e.preventDefault();
dojo.xhrPost({
url: "Loader",
form: "mainForm",
handleAs: "json",
load: function(data, args){
if(typeof data == "error"){
console.warn("error!",args);
} else {
//假設傳回來的data是一個包含head和body的json,
//其中head包含了一些load-on-demand的script
dojo.query('head').addContent(data.head);

//dojo.parser.parse()吃DomNode,
//所以先create一個id設為updated的div
var updated = dojo.doc.createElement("div").attr("id", "updated");

//把data.body就是要拿來render的html
updated.innerHTML = data.body;

//再用dojo.byId()拿#updated來餵給dojo.parser吃
dojo.parser.parse(dojo.byId("updated"));
}
}
});
}

x86 -64下的編譯錯誤

/usr/local/lib/libcharguess.a(charguess.o): relocation R_X86_64_32 against `__gxx_personality_v0@@CXXABI_1.3' can not be used when making a shared object; recompile with -fPIC
/usr/local/lib/libcharguess.a: could not read symbols: Bad value


我是在裝libcharguess的時候遇到的問題。她叫你recompile with -fPIC,那就乖乖聽他的話。

在make之前,先手工編輯Makefile,在CFLAGS或CXXFLAGS後面加個參數-fPIC。

CXXFLAGS = -g -O2 -fPIC

改玩之後再make && make install。

XMLbeans版本錯誤

Caused by: org.apache.xmlbeans.SchemaTypeLoaderException: XML-BEANS compiled schema: Incompatible minor version - expecting up to 23, got 24
用XMLbeans把XML Schema轉成jar時用的是XMLbeans2.4,然而axis2裡頭的XMLbeans是2.3,更新版本即可。

Author