2016-11-20 5 views
0

Вот очень простой dojo фрагмент кода, который не работает:додзё EdgeToEdgeList: программно задать магазин

require([ 
 
    "dojo/parser", 
 
    "dojo/on", 
 
    "dojo/dom", 
 
    "dijit/registry", 
 
    "dojox/mobile/EdgeToEdgeStoreList", 
 
    "dojox/mobile/EdgeToEdgeList", 
 
    "dojo/store/Memory", 
 
    "dojo/domReady!" 
 
], function(parser, on, dom, registry, EdgeToEdgeStoreList, Memory) { 
 
    parser.parse(); 
 

 
    var records = [{ 
 
    deviceID: "1", 
 
    state: "done" 
 
    }, { 
 
    deviceID: "2", 
 
    state: "idle" 
 
    }]; 
 

 
    var store = new Memory({ 
 
    data: records, 
 
    idProperty: "deviceID" 
 
    }); 
 

 
    registry.byId("list").setStore(store); 
 
});
<script src="http://ajax.googleapis.com/ajax/libs/dojo/1.11.2/dojox/mobile/deviceTheme.js"></script> 
 
<script src="https://ajax.googleapis.com/ajax/libs/dojo/1.11.2/dojo/dojo.js" djConfig="parseOnLoad: false, async: true"></script> 
 
<div data-dojo-type="dojox/mobile/ScrollableView"> 
 
    <ul id="list" data-dojo-type="dojox/mobile/EdgeToEdgeStoreList" data-dojo-props="itemMap: {deviceID: 'label'}, select: ''"></ul> 
 
</div>

list элемент не найден. Правильный способ заполнить магазин и установить его для списка? Где (есть) мои ошибки?

ответ

0

Основная причина, по которой это не работает, заключается в том, что parser.parse() также является асинхронным, поэтому вы должны дождаться его завершения.

Существует разница между dojo/domReady! и dojo/ready, и в вашей ситуации вы должны реально использовать dojo/ready, поскольку у вас есть parseOnLoad конфигурации установлен в false (см больше here).

Теперь, поскольку dojo/ready автоматически ждет всех вызовов разбора, чтобы закончить до того, как код выполняется, вы должны иметь что-то вроде этого:

parser.parse(); 
ready(function() { 
    // put your logic in here 
}); 

Другие варианты есть просто зарегистрировать функцию обратного вызова:

parser.parse().then(function() { 
    // put your logic here 
}); 

Самый простой способ сделать это - это просто установить parseOnLoad вариант true, а затем вы можете удалить parser.parse() из своего кода, и все остальное может оставаться неизменным.

В качестве примечания, только одна небольшая ошибка, которую я заметил в вашем исходном фрагменте, заключается в том, что вам не хватает EdgeToEdgeList из аргументов функции вашего модуля.

Смежные вопросы