2017-02-02 27 views
0

私は、次のようなプログラム的DOMNODEを追加した後にイベントを実行しようとしています:データドージョアタッチイベントの実行方法を教えてください。

<a href="javascript:void(0)" data-dojo-attach-event="click:openRegistration">Register</a> 

それが後で追加されているため、ページが最初にロードされるときに、このイベントは道場によって解析されていません。実行後でも

parser.parse(); 

イベントは実行されません。このイベントを実行させるにはどうすればよいですか?

答えて

1

のようになりますその添付イベントを使用していウィジェット:それは冗長解析し、既に作成されたものを作成し、混乱を引き起こします。ページが解析された後にプログラムでノードを追加するには、dojo/dom-constructを参照してください。

require(["dojo/dom-construct", "dojo/domReady!"], 
    function(domConstruct) { 

     var openRegistration = function() { 
      alert("foo"); 
     } 

     domConstruct.create("a", { 
      innerHTML: "Register", 
      click: openRegistration, 
      href: "javascript:void(0)" 
     }, document.body); 
    }); 

ノードを挿入する親ノードへの参照をdocument.bodyに置き換え、配置オプションの3番目のパラメータを参照してください。

+0

ちょうど私が探していた答え –

+0

カイル、どのように我々はopenRegistration関数でいくつかのデータを渡すことができますか? –

+0

openRegistrationはDojo正規化イベントを引数として取得します。これで、イベントを発生させたノードとウィジェットに到達することができます。これで十分かもしれません。そうでなければ、 'dojo/_base/lang.hitch'またはfunction.bindを' this' openRegistrationをバインドするためにウィジェットに見るので、必要なデータを取得することができます。 'クリック:lang.hitch(これ、openRegistration)、'。 openRegistrationはすべてのウィジェットデータにアクセスできます。また、引数をlang.hitchに渡すこともできます。これらの引数は、openRegistrationの呼び出しに混在します。通常のdojoイベント引数が最後に表示されます。 –

0

click:openRegistrationの代わりにonclick:openRegistrationを使用してください。

<a href="javascript:void(0)" data-dojo-attach-event="onclick:openRegistration">Register</a> 
+0

動作しませんでした。彼らのドキュメントでは、 'onclick'の代わりに' click'イベントを使うことができます –

+0

dijit._WidgetsInTemplateMixinは、ドキュメントからdata-dojo-attach-event = "onclick"リファレンスを指定していますhttps://dojotoolkit.org/reference-guide/1.10/ dijit/_WidgetsInTemplateMixin.html – GibboK

+0

私はどちらかの方法で試してみましたが、うまくいきませんでした。これは、私が言及していた参照です:https://dojotoolkit.org/reference-guide/1.10/quickstart/events.html 私はサーバーからこのメッセージを受け取りました。単にDojoが既に接続されているという意味ですページをレンダリングします。 –

0

残りのコードを見ることなく、私はgussesinに範囲の問題があります。それとも、正しくDOMイベントをケースに入れていない - のonClick

あなたの機能は_TemplatedMixinを継承添付し、イベントにテンプレートを使用するのと同じウィジェットの一部である必要があります。あなたはそれはあなたが道場パーサは二回ページを解析したくない

require([ 
    'dojo/declare', 
    'dijit/_WidgetBase', 
    'dijit/_TemplatedMixin', 
    'dojo/text!myNameSpace/templates/MyWidget.html' 
], 
function(declare, _WidgetBase, _TemplatedMixin, template){ 
    declare('MyWidget', [ _WidgetBase, _TemplatedMixin ], { 
     templateString: template, 
     openRegistration: function { 
       // do stuff here 
     } 
    }); 
}); 
関連する問題