2011-05-25 61 views
0

我在dojo對話框中使用閉包來防止函數和變量發生衝突。javascript,dojo,在jsp中使用外殼構建對話框

我有一個包含複雜對話框的jsp頁面。它主要是在工作。只是一個非常惱人的細節。如果小部件發生變化,我該如何通知處理程序方法?我們希望儘可能多的對話框的java腳本保存在閉包中。

由於彈出窗口出現在多個位置,我希望未來的程序員能夠用任何東西替換myVar。有沒有一種方法來確定正確放什麼的onChange

------ JSP頁面-----
var myVar = new MyNewPopupStuff(42);
myVar.contstrucDialog();
......
includeTemplate template="myDialog.jsp"
.....

--------myDialog.jsp----
< script type="text/javascript" src="my.js"/>

.....

< div id="myDialogData" dojotype="dijit.layout.ContentPane" region="right" splitter="true" class="data" style=" width:50%; " > <\/div>
....

-------- my.js文件----

function MyNewPopupStuff(param){ 

    this.contstrucDialog = function() 
    ....... 
    while(more widgets to add){ 
      fieldHolder=dojo.byId("myDialogData" 
    addWidget(widgetName,myDialogData); 
    } 

    addWidget = function(fieldHolder, widgetName){ 
    // need to print the name of the variable in "myVar.bar()" (myVar or what ever it may be) 
    dojo.place(newLabel, fieldHolder); 
     var newField = new dijit.form.ValidationTextBox({ 
     id: "i"+contactTypeId, 
     name: widgetName, 
     value: value, 
     trim: true, 
     **onChange:**??????when the widget is mofied I want to call the below modifyOnChange not some other modify on change I think I want something like myVar.modifyOnChange???? 

    }); 
    } 


    this.modifyOnChange = function() 
    { 
     alert("modified"); 
    } 
} 

回答

0

如果你使用了一個框架,實現了功能的EcmaScript 5綁定方法,使用方法:

onChange: modifyOnChange.bind(this), 

別人自己有實現它

onChange: (function(self) { 
    return function() { 
     return modifyOnChange.apply(self, arguments); 
    } 
})(this), 

myVar.modifyOnChange可能會工作,但如果您將代碼綁定到您期望持有該對象的全局代碼,那麼將這些東西抽象到類中有什麼意義呢?如果有人想添加另一個MyNewPopupStuff對象會發生什麼?

+0

謝謝你的幫助。 – 2011-05-27 18:01:59

+0

不客氣。 – LHMathies 2011-05-27 19:36:52