Zend Dojo 콤보 상자에서 dojo.data를 찾을 수 없습니다.
-
06-07-2019 - |
문제
다음 코드를 사용하여 Zend에서 dojo 콤보박스를 작동시키려고 합니다.
$url = '/db/autocomplete/table/suburbs';
$element = new Zend_Dojo_Form_Element_ComboBox('suburb1');
$element->setStoreId('suburbsStore');
$element->setStoreType('dojo.data.ItemFileReadStore');
$element->setStoreParams(array('url' => $url));
$element->setDijitParam('searchAttr', 'name');
출력은 다음과 같습니다(약간 형식을 다시 지정했습니다).
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/dojo/1.2.0/dojo/dojo.xd.js"></script>
<script type="text/javascript">//<![CDATA[
dojo.require("dojo.data.ItemFileReadStore");
dojo.require("dijit.form.ComboBox");
dojo.require("dojo.parser");
dojo.addOnLoad(function() {
dojo.forEach(zendDijits, function(info) {
var n = dojo.byId(info.id);
if (null != n) {
dojo.attr(n, dojo.mixin({ id: info.id }, info.params));
}
});
dojo.parser.parse();
});
var suburbsStore = new dojo.data.ItemFileReadStore({"url":"\/db\/autocomplete\/table\/suburbs"});
var zendDijits = [
{"id":"suburb1","params":{
"store":"suburbsStore",
"searchAttr":"name",
"dojoType":"dijit.form.ComboBox"}
},
{"id":"suburb2","params":{
"store":"suburbsStore",
"searchAttr":"name",
"dojoType":"dijit.form.ComboBox"}
}
];
//]]></script>
그리고 이 HTML(외부 항목은 제거됨):
<input options="" id="suburb1" name="suburb1" value="" type="text" />
<input options="" id="suburb2" name="suburb2" value="" type="text" />
<input type="submit" />
내가 겪고있는 오류는 dojo.data가 정의되지 않았습니다. 에 var suburbsStore = new dojo.data.ItemFileReadStore(...)
선.분명 그 전화는 그 이후야 dojo.require("dojo.data.ItemFileReadStore");
그럼 괜찮겠지?!그러나 분명히 나는 뭔가를 놓치고 있습니다.
감사합니다!
해결책
크로스 도메인 dojo(귀하의 경우 Google CDN)를 사용하는 경우 dojo.require는 비동기적으로 작동하므로 문제는 실제로 사용 가능하기 전에 ItemFileReadStore 인스턴스를 생성하려고 한다는 것입니다.모든 모듈을 사용할 수 있을 때 실행되도록 보장되기 때문에 코드(var SuburbsStore = new dojo.data.ItemFileReadStore...)를 dojo.addOnLoad 핸들러로 이동해야 합니다.일반 로더와 xdomain 로더의 차이점에 대해 읽을 수 있습니다. 여기.
제휴하지 않습니다 StackOverflow