4
<div dojoType="dojo.Dialog" id="alarmCatDialog" bgColor="#FFFFFF" bgOpacity="0.4" toggle="standard">
<div class='dijitInline'>
       <input type='input' class='dateWidgetInput' dojoAttachPoint='numberOfDateNode' selected="true">
</div>

このダイアログを表示する方法を試しましたdijit.byId('alarmCatDialog').show();

上記のコードはテンプレートでありdijit.byId('alarmCatDialog').show()、.jsファイルから呼び出しました。

dojo.attr(this.numberOfDateNode)このコードは機能し、データを取得しました。しかし、dojoattachpointをidに変更すると、機能しdijit.byId('numberOfDateNode')なくなります。

4

2 に答える 2

9

numberOfDateNodeはプレーンなDOMノードであり、widget / dijit、つまり拡張するjavascriptオブジェクトではありません。dijit/_Widgetこれが、を介して参照を取得できない理由ですdijit.byId("numberOfDateNode")。代わりに使用dojo.byId("numberOfDateNode")すると、すべて設定されます。

dojoAttachPointまたは、そのHTML5有効バージョンがdijitテンプレートdata-dojo-attach-point内で使用されて、DOMノードへの参照または子dijitをdijit javascriptオブジェクトに アタッチしています。これが、への参照がある理由です。dijit.byId('alarmCatDialog').numberOfDateNode<input type='input' class='dateWidgetInput' .../>

使用する主な理由data-dojo-attach-pointは次のとおりです。

  • dijitの複数のインスタンスを作成できるため、同じIDを持つ複数のノード/ dijitsがあるため、テンプレートはIDでノード/dijitsを識別できません。
  • これはエレガントな宣言型の方法であるため、コードがでいっぱいになることはありませんdijit.byId/dojo.byId
于 2012-06-16T00:39:10.253 に答える
0

内容とdijit.Dialogのテンプレートを追跡することが重要です。ダイアログのコンテンツを設定すると、そのマークアップが解析されますが、TemplatedMixinがcontent-markup-declared-widgetsに適用されるような方法ではありません。

テンプレートを正常に実装するには、次のコードのようなものが必要になります。attachPointsが機能する場所についてコメントしたことに注意してください。

このSitePenブログは、このテーマに関する優れた情報を提供します

define(
 [
   "dojo/declare",
    "dojo/_base/lang",
    "dijit/_Templated",
   "dijit/_Widget",
   "dijit/Dialog"
 ], function(
   declare,
    lang,
    _Templated,
    _Widget,
   Dialog
 ) {
  return declare("my.Dialog", [Dialog, _Templated], {
      // set any widget (Dialog construct) default parameters here
       toggle: 'standard',
        // render the dijit over a specific template
        // you should be aware, that once this templateString is overloaded,
        // then the one within Dialog is not rendered
      templateString: '<div bgColor="#FFFFFF" bgOpacity="0.4">' +// our domNode reference
                '<div class="dijitInline">' +
                    // setting a dojoAttachPoint makes it referencable from within widget by this attribute's value
                '  <input type="input" class="dateWidgetInput" dojoAttachPoint="numberOfDateNode" selected="true">' +
                '</div>' +
                '</div>',

        constructor: function(args, srcNodeRef) {
            args = args || {} // assert, we must mixin minimum an empty object
            lang.mixin(this, args);
        },
        postCreate: function() {

                    // with most overrides, preferred way is to call super functionality first
                    this.inherited(arguments);

            // here we can manipulate the contents of our widget, 
            // template parser _has run from this point forward
            var input = this.numberOfDateNode;
            // say we want to perform something on the numberOfDateNode, do so

        },
        // say we want to use dojo.Stateful pattern such that a call like
        //   myDialogInstance.set("dateValue", 1234)
        // will automatically set the input.value, do as follows
        _setDateValueAttr: function(val) {
            // NB: USING dojoAttachPoint REFERENCE
            this.numberOfDateNode.value = val;
        },
        // and in turn we must set up the getter
        _getDateValueAttr: function() {
            // NB: USING dojoAttachPoint REFERENCE
            return this.numberOfDateNode.value;
        }

  });

});
于 2012-06-16T21:23:46.903 に答える