2

カスタム プレースホルダー コントロールを作成しようとしています。コードの抜粋は次のとおりです。

(function () {
    var Placeholder = WinJS.Class.define(function ctor(elem, options) {
        this.element = elem || document.createElement('div');
        this.element.winControl = this;

        WinJS.UI.setOptions(this, options);

        this.init();
    },
    {
        element: {
            get: function () {
                return this._element;
            },
            set: function (value) {
                this._element = value;
            }
        },

        placeholder: {
            get: function () {
                return this._placeholder;
            },
            set: function (value) {
                this._placeholder = value;

                this._placeholderElement.textContent = value;
            }
        },

        placeholderClass: {
            get: function () {
                return this._placeholderClass;
            },
            set: function (value) {
                this._placeholderClass = value;

                this._placeholderElement.classList.add(value);
            }
        },

        _placeholderElement: null,

        init: function () {
            this._addPlaceholder();
        },

        _addPlaceholder: function () {
            /* Code to add placeholder. */
        }
    });

    WinJS.Namespace.define("ControlX", { Placeholder: Placeholder });
})();

私はこの方法でhtmlでこのコントロールを使用しようとしています:

<div data-win-control="ControlX.Placeholder" data-win-res="{winControl:{placeholder:'resHeight'}}"><input type="text"/></div>

属性を使用してプレースホルダー値を設定するとdata-win-res、例外が発生します。

「未定義または null 参照のプロパティ 'placeholder' を設定できません」

この記事によると: WinJS コントロールをローカライズする方法では、リソース文字列を winControl 属性にもバインドできます。

私は何を間違っていますか?

リソース文字列を winControl プロパティにバインドする他の方法はありますか?

4

1 に答える 1

1

私は C# と XAML で Windows 8 アプリを開発しているので、正確な解決策はわかりませんが、この返信がうまくいくと思います:

内部クラスを作成してパラメーター内だけでメソッドを定義するのではなく、すべてのメソッドとクラスを分離し、新しいカスタム WinJS コントロールに適切な名前を付けて 1 つのメソッドに結合することをお勧めします。そのコントロールの名前を指定した後、DIV タグの名前を介してそれを呼び出す必要があります。

私はそれほど強力ではなく、そのコードで練習していません。コードを提供しない方がよいでしょう。申し訳ありません。しかし、名前を付けてその名前で呼び出すことで、最善を尽くすことができると確信しています...

(これがあなたの答えを与えていないと思うなら許してください。しかし、私はこれが役立つかもしれないと思います)

于 2013-02-20T03:58:58.650 に答える