2012-08-24 62 views
0

我正在使用Dojo Toolkit開發移動應用程序。 我想作以下的小窗口:在Dojo中創建小部件

<div data-dojo-type="dojox.mobile.ListItem" data-dojoprops="moveTo:'breakdown'"> 
    <div>Maximum: Some value</div> 
</div> 

我希望能夠利用這樣的小部件:

<div data-dojo-type="dojox.mobile.RoundRectList"> 
    <div data-dojo-type="MyWidget" data-dojo-props="maximum:'1200'"></div> 
</div> 

這裏是我做過什麼至今:

require(
    [ "dojo/_base/declare", "dojo/parser", "dojo/ready", 
     "dojox/mobile/ListItem", "dijit/_WidgetBase", 
     "dijit/_TemplatedMixin" ], 

     function(declare, parser, ready, ListItem, _WidgetBase, _TemplatedMixin) { 
      declare("MyWidget", [ ListItem, _WidgetBase, _TemplatedMixin ], { 

       templateString: "<div>"   
           + "<div>Maximum: <span data-dojo-attach-point='maximumNode'></span></div>" 
           + "</div>", 

       maximum : "unknown", 
       _setMaximumAttr : { node : "maximumNode", type : "innerHTML" }, 

       buildRendering : function() { 
        this.inherited(arguments); 
       } 
      }); 

      ready(function() { 
       parser.parse(); 
      }); 
     }); 

我沒有得到任何錯誤或類似的東西,頁面沒有加載。 該代碼有什麼問題?

+0

你不需要_WidgetBase也不需要_TemplatedMixin來創建ListItem的擴展,ListItem可以繼承這兩個類 - 儘管它並沒有受到傷害。你有沒有嘗試過創建它,而不使用parser.parse在你準備好的func中? – mschr

+0

我還沒有試圖以編程方式創建它,因爲根據練習不允許這樣做。但我也不知道如何以編程方式執行此操作,因爲我是Dojo Toolkit的新手。你能不能給我一些工作代碼或指導教程的鏈接? – Javiator

回答

1

我寫了這個快速的例子。

從您的代碼段我懷疑你可能想要做這樣的事情http://jsfiddle.net/hJJUD/7/

我建議不要更改從的listItem模板,而是嘗試用它的性能發揮。看看這個文檔http://dojotoolkit.org/reference-guide/1.8/dojox/mobile/ListItem.html

如果你發現你需要其他東西讓我知道。

+0

感謝您的回覆。除了更改模板之外沒有別的選擇,因爲我實際上有一個更復雜的ListItem。我只列出了最大的屬性,因爲我認爲這足以解決問題。我如何在你的例子中使用模板? – Javiator

+0

通過查看代碼,它似乎是不可能的,因爲ListItem的代碼將this.srcNodeRef和this.containerNode和this.domNode設置爲同一個實例,而_TemplatedMixin假定它們不同。在這一點上,我建議你嘗試「克隆」ListItem中的內容,並創建一個你自己的(不擴展它)。雖然這很長。 – eburgos

+1

事情是,ListItem不使用templateString,它通過'buildRendering'編程建立DOM。 – mschr