2016-11-20 35 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