0

dojox.mobile アプリ用のカスタム ListItem ウィジェットを作成したいと考えています。HTMLコードで使用すると機能しますが、プログラムで使用しようとするとTypeErrorがスローされます。

これは、私のカスタム 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;  });

このカスタム ListItem を 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"});

誰かが私が欠けているものを知っていますか?

よろしくお願いします。

4

1 に答える 1

1

私が考えることができる唯一の(明らかな)理由は、モジュールを必要としなかったということですか?ところで、Dojo は現在「グローバルなし」のアプローチに向かっているため、クラスに明示的な ID を与えず、グローバルな myapp.LabeledInputListItem の代わりに AMD モジュールの値を使用する方がよい場合があります。

于 2013-02-06T07:25:58.173 に答える