2014-07-09 36 views
0

得到事件我有一個按鈕,一個非常簡單的模板,我正在使用的js文件模板,但我不能得到的情況下,在控制檯我能夠得到第一控制檯輸出「1」,但沒能獲得其他兩個控制檯輸出,控制檯顯示以下錯誤:無法從按鈕從模板道場

"TypeError: undefined is not a function↵ at declare.postCreate (http://localhost:8383/mysite/pages/pathsubscriber/widget/subscribersPage.js:30:29) 

這裏是我的subscriberspage.js:

define([ 
    "dojo/_base/declare", 
    "dijit/_WidgetBase", 
    "dijit/_OnDijitClickMixin", 
    "dijit/_TemplatedMixin", 
    "dojo/text!./templates/subscribersPage.html", 
    "dijit/form/Form", 
    "dijit/form/TextBox", 
    "dijit/form/Button", 
    "dojo/on", 
    "dojo/dom", 
    "dojo/_base/lang" 
], function(declare, _WidgetBase, _OnDijitClickMixin, _TemplatedMixin, 
     template, form, textbox, button, on, dom, lang) { 

    console.log("from 1"); 
    return declare([_WidgetBase, _OnDijitClickMixin, _TemplatedMixin 
    ], { 
     templateString: template, 
     postCreate: function() { 
      this.inherited(arguments); 

      this.formButton.on('click', lang.hitch(this, function(event) { 
       console.log("form 2"); 
      })); 

      on(this.formButton, 'click', lang.hitch(this, function(event) { 
       console.log("from 3"); 
      })); 

     } 

    }); 
}); 

這裏是我的模板:

<div> 

    <input type="text" name="field1" data-dojo-type="dijit/form/TextBox" /> 

     <input type="password" name="field2" data-dojo-type="dijit/form/TextBox" /> 

    <button type="button" data-dojo-attach-point = "formButton" data-dojo-type="dijit/form/Button" >Login</button> 

    </div> 

我是新來的道場,我不能夠從第一天找出問題。

+0

我認爲你需要將'_WidgetsInTemplateMixin'類添加到你的js文件'define()'調用像'define(...,「dijit/_TemplatedMixin」,「dijit/_WidgetsInTemplateMixin」,...)'。究其原因是你的模板中包含Dojo小部件。我也是新來的道場。文檔不夠精確和清晰。希望它有幫助 – frank

+0

我缺少dijit/_WidgetsInTemplateMixin,感謝您指出。 – focode

回答

1

當您在自己的小部件中使用小部件時,還應該繼承dijit/_WidgetsInTemplateMixin

而且,你不應該使用dojo/on模塊用於註冊控件的事件處理程序,而是使用on()功能應該可以在你的widget(只要您使用dijit/_WidgetsInTemplateMixin模塊),例如:

this.formButton.on("click", lang.hitch(this, function(event) { 
    console.log("form 2"); 
})); 

甚至更​​短的將是使用data-dojo-attach-event屬性,例如:

<button type="button" data-dojo-attach-point="formButton" data-dojo-type="dijit/form/Button" data-dojo-attach-event="onClick:myFunction">Login</button> 

在這種情況下,當你點擊該按鈕,你的小部件中的函數將被調用。