2013-02-01 63 views
0

我想爲我的dojox.mobile應用程序創建自定義ListItem小部件。它工作,如果我在我的HTML代碼中使用它,但它會引發TypeError,如果我嘗試以編程方式使用它。dojox.mobile:自定義ListItem小部件:「...不是構造函數」

這是JS-代碼爲我的自定義列表項:

define([ 
"dojo/_base/declare", 
"dojo/dom-construct", 
"dojox/mobile/ListItem"], function(declare, domConstruct, ListItem){ 

var LabeledInputListItem = declare("myapp.LabeledInputListItem", ListItem, { 

    labelText: "", 
    placeholder: "", 
    value: "", 

    _setItemLabelAttr: function(val) { 
     this.labelText = val; 
     this.qDescSpan.innerHTML = val; 
    }, 

    _setPlaceholderAttr: function(val) { 
     this.placeholder = val; 
    }, 

    _setValueAttr: function(val) { 
     this.value = val; 
    }, 

    startup: function(){ 
     if(this._started){ return; } 

    }, 

    constructor: function(params) { 
     this.placeholder = params.placeholder; 
     this.labelText = params.labelText; 
     this.valu = params.value; 
    }, 

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

     this.qDescDiv = domConstruct.create("div", {className: "tableItemDescription", id: "asd"}, this.labelNode, "before"); 
     this.qDescSpan = domConstruct.create("span", null, this.qDescDiv, "first"); 

     this.qInputDiv = domConstruct.create("div", {className: "tableItemInput"}, this.qDescDiv, "after"); 
     this.qInputText = domConstruct.create("input", {className: "mblTextBox sessionTextbox", placeholder: this.placeholder, value: this.value}, this.qInputDiv, "first"); 
     console.log(this.labelText, this.placeholder, this.value); 
    }, 

}); 

return LabeledInputListItem; }); 

我可以在我的HTML代碼中使用該自定義列表項是這樣的:

<li data-dojo-type="myapp/LabeledInputListItem" data-dojo-props="itemLabel: 'asdasd', placeholder: 'placeholder', value: 'value'"></li> 

但是,如果我嘗試創建我的自定義ListItem以編程方式它會導致以下錯誤:

TypeError: myapp.LabeledInputListItem is not a constructor 

var childWidget = new myapp.LabeledInputListItem({placeholder: "placeholder"}); 

有人知道我是什麼嗎?唱?

在此先感謝您的幫助!

+0

正如@edurocher所說,你不應該再使用全局風格的實例。如果你改用'require([「myapp/LabeledInputListItem」],函數(LabeledInputListItem){new LabeledInputListItem({placeholder:「placeholder」});});'?請注意,該類應該在'myapp/LabeledInputListItem.js'中。 –

回答

1

我能想到的唯一(顯而易見的)理由是你不需要模塊?順便說一下,Dojo現在正朝着「無全局」的方向發展,所以最好不要給你的類一個明確的ID,並且使用AMD模塊的值而不是全局的myapp.LabeledInputListItem。

相關問題