문제

다음 코드를 사용하여 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 로더의 차이점에 대해 읽을 수 있습니다. 여기.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top