1

私はここに置いたこのリンクhttp://livedocs.dojotoolkit.org/dojox/mobile/RoundRectDataListから例を試していました:

require([
    "dojo/ready",
    "dojo/data/ItemReadStore",
    "dojox/mobile/RoundRectDataList",
    "dojox/mobile",
    "dojox/mobile/parser"
], function(ready, ItemFileReadStore, RoundRectDataList){
    ready(function(){
        var storeData = {
            "items": [
                { "label": "Wi-Fi", "icon": "images/i-icon-3.png", "rightText": "Off",  "moveTo": "bar" },
                { "label": "VPN", "icon": "images/i-icon-4.png", "rightText": "VPN",  "moveTo": "bar" }
            ]
        };
        var sampleStore = new ItemFileReadStore({data:storeData});
        var dataList = new RoundRectDataList({store:sampleStore}, "dataList");
        dataList.startup();
    });
});

そしてhtml部分:

<ul id="dataList"></ul>

問題は、これをボタンに配置して同じコードを繰り返すことができないことです。このエラーが発生するため:

Uncaught Error: Tried to register widget with id==dataList but that id is already registered 

ノードを破棄または空にすると、ノードが表示されなくなります...どうすればよいですか? <ul>DOMで同じものを破棄して作成しますか?

4

2 に答える 2

0

申し訳ありません。しかし、私がしようとしていたことを行う方法を見つけました:

  require([
    "dojo/on",
    "dojo/dom",
    "dojo/dom-construct",
    "dojox/mobile/parser",    // This mobile app uses declarative programming with fast mobile parser
    "dojox/mobile",           // This is a mobile app.
    "dijit/dijit",
    "dijit/registry",         
    "dojo/data/ItemFileReadStore",
    "dojox/mobile/RoundRectDataList",
    "dojo/_base/array",
    "dojo/domReady!"
  ], function(on, dom, domConstruct, parse, mobile, dijit, registry, itemFileReadStore, roundRectDataList) {
    self = this;

    populateVistoriasList = function() {
      var idx = 'vistoriasList'
      var vistoriasList = dijit.byId( idx );
      if ( vistoriasList && vistoriasList instanceof roundRectDataList )
        vistoriasList.destroyRecursive(false);

      domConstruct.destroy( idx );
      domConstruct.create('ul', {id: idx }, 'vistoriasListContainer');

      self.storeData = {
          "items": [
              { "label": "Wi-Fi", "icon": "images/i-icon-3.png", "rightText": "Off", "moveTo": "bar" },
              { "label": "VPN", "icon": "images/i-icon-4.png", "rightText": "VPN", "moveTo": "bar" }
          ]
      };
      self.sampleStore = new itemFileReadStore({data:storeData});
      self.dataList = new roundRectDataList({store:sampleStore}, idx );
      self.dataList.startup();
    }

とてもうまくいきました... ;) もう一度、同じ質問をして申し訳ありません...

于 2013-01-23T04:34:49.567 に答える
0

RoundRectDataList.refresh 関数を使用して、 ItemFileReadStore をRoundRectDataListにリロードする簡単な方法があります。

 require([
"dojo/on",
"dojo/dom",
"dojo/dom-construct",
"dojox/mobile/parser",    // This mobile app uses declarative programming with fast mobile parser
"dojox/mobile",           // This is a mobile app.
"dijit/dijit",
"dijit/registry",         
"dojo/data/ItemFileReadStore",
"dojox/mobile/RoundRectDataList",
"dojo/_base/array",
"dojo/domReady!"
], function(on, dom, domConstruct, parse, mobile, dijit, registry, itemFileReadStore, roundRectDataList) {
var self = this;

populateVistoriasList = function() {
  var idx = 'vistoriasList',
      vistoriasList = dijit.byId( idx );

  self.storeData = {
      "items": [
          { "label": "Wi-Fi", "icon": "images/i-icon-3.png", "rightText": "Off", "moveTo": "bar" },
          { "label": "VPN", "icon": "images/i-icon-4.png", "rightText": "VPN", "moveTo": "bar" }
      ]
  };
  self.sampleStore = new itemFileReadStore({data:storeData});

  if ( vistoriasList && vistoriasList instanceof roundRectDataList ) {
    vistoriasList.store = self.sampleStore;
    vistoriasList.refresh(); 
  } else {
    self.dataList = new roundRectDataList({store:self.sampleStore}, idx );
    self.dataList.startup();
  }
}
于 2013-02-25T15:38:31.057 に答える