Javascript-Dojo-Object对自身的引用
我使用DojoJSFramework 1.6来声明和跟踪自定义类。我想使用这些类来创建可重用的功能,如用户编辑对话框等 但是,问题是,例如,在类中使用方法创建dojo html类型按钮时。如果该按钮需要在类中回调一个方法,则它不知道要调用的实例化变量 我如何让stage2在不硬编码对象名的情况下引用这个类实例 示例类:Javascript-Dojo-Object对自身的引用,javascript,events,class,dojo,Javascript,Events,Class,Dojo,我使用DojoJSFramework 1.6来声明和跟踪自定义类。我想使用这些类来创建可重用的功能,如用户编辑对话框等 但是,问题是,例如,在类中使用方法创建dojo html类型按钮时。如果该按钮需要在类中回调一个方法,则它不知道要调用的实例化变量 我如何让stage2在不硬编码对象名的情况下引用这个类实例 示例类: dojo.provide('edit.contacts'); dojo._hasResource["edit.contacts"] = true; dojo.declare("
dojo.provide('edit.contacts');
dojo._hasResource["edit.contacts"] = true;
dojo.declare("edit.contacts", null,
{
/*
* Init
*/
init : function(customer_id)
{
var out = ''
+'<button dojoType="dijit.form.Button" onClick="stage2();" />Edit</button>'
+'';
// Create the dlg box
var edit_contacts_dlg = new dijit.Dialog(
{
title : 'New Diag',
style : 'width:550px; height:600px;background:#FFFFFF;',
id : 'edit_contacts_dlg',
content : out
}).show();
},
/*
* Stage 2
*/
stage2 : function()
{
alert('halllo');
}
}
dojo.provide('edit.contacts');
dojo._hasResource[“edit.contacts”]=true;
declare(“edit.contacts”,null,
{
/*
*初始化
*/
初始化:函数(客户id)
{
var out=''
+“编辑”
+'';
//创建dlg框
var edit_contacts_dlg=新建dijit.Dialog(
{
标题:“新诊断”,
样式:“宽度:550px;高度:600px;背景:#FFFFFF;”,
id:“编辑联系人”,
内容:外
}).show();
},
/*
*第二阶段
*/
阶段2:函数()
{
警惕(“哈洛”);
}
}
用法示例:我不是真的使用Dojo,但我尝试了一些东西。看起来你可以像平常一样使用它。尝试这个演示:我不是真的使用Dojo,但我尝试了一些东西。看起来你可以像平常一样使用它。尝试这个演示:这是一个范围问题。你将永远面临这个问题混合使用JS和HTML来创建节点或小部件时会出现这种问题。在调用init()方法时,需要引用button小部件的实例,但由于使用HTML和dojo.parser来创建按钮,所以没有引用。基本上,有三种解决方法:
var out = new dijit.form.Button({
label: 'Edit',
onClick: dojo.hitch(this, 'stage2')
});
var edit_contacts_dlg = new dijit.Dialog({
title : 'New Diag',
style : 'width:550px; height:600px;background:#FFFFFF;',
id : 'edit_contacts_dlg_' + uniqueId,
content : out
}).show();
var out = '<button dojoType="dijit.form.Button" id="' + uniqueId + '">Edit</button>';
var edit_contacts_dlg = new dijit.Dialog({
title : 'New Diag',
style : 'width:550px; height:600px;background:#FFFFFF;',
id : 'edit_contacts_dlg_' + uniqueId,
content : out
}).show();
var btn = dijit.byId(uniqueId);
dojo.connect(btn, "onClick", this, "stage2");
var out='Edit';
var edit_contacts_dlg=新建dijit.Dialog({
标题:“新诊断”,
样式:“宽度:550px;高度:600px;背景:#FFFFFF;”,
id:'edit_contacts_dlg_'+uniqueId,
内容:外
}).show();
var btn=dijit.byId(uniqueId);
connect(btn,“onClick”,这是“stage2”);
dojo.require(“dijit.\u小部件”);
dojo.require(“dijit._模板化”);
require(“dijit.Dialog”);
require(“dijit.form.Button”);
ready(function()){
declare(“edit.ContactTemplate”,[dijit.\u小部件,dijit.\u模板化]{
templateString:“编辑”,
widgetsInTemplate:正确
})
declare(“edit.contacts”,null{
初始化:函数(customerId){
this.customerId=customerId;
var widget=new edit.ContactTemplate();
connect(widget.editbn,“onClick”,这个是“stage2”);
this.editContactDlg=新建dijit.Dialog({
标题:“对话框:”+customerId,
样式:“宽度:200px;高度:80px;背景:#ffffffff;”,
id:“编辑联系人”+customerId,
内容:小部件
});
this.editContactDlg.show();
归还这个;
},
阶段2:函数(){
警报(this.customerId);
}
});
var c1=新编辑的.contacts().init(“客户1”);
var c2=新的edit.contacts().init(“客户2”);
});
当您需要引用许多小部件/节点时,这非常有用。这是一个范围问题。在混合使用JS和HTML创建节点或小部件时,您将始终面临此类问题。在调用init()时,您需要引用按钮小部件的实例方法,因为您使用了HTML和dojo.parser来创建按钮,所以没有该方法。基本上,您有三种解决方法:
var out = new dijit.form.Button({
label: 'Edit',
onClick: dojo.hitch(this, 'stage2')
});
var edit_contacts_dlg = new dijit.Dialog({
title : 'New Diag',
style : 'width:550px; height:600px;background:#FFFFFF;',
id : 'edit_contacts_dlg_' + uniqueId,
content : out
}).show();
var out = '<button dojoType="dijit.form.Button" id="' + uniqueId + '">Edit</button>';
var edit_contacts_dlg = new dijit.Dialog({
title : 'New Diag',
style : 'width:550px; height:600px;background:#FFFFFF;',
id : 'edit_contacts_dlg_' + uniqueId,
content : out
}).show();
var btn = dijit.byId(uniqueId);
dojo.connect(btn, "onClick", this, "stage2");
var out='Edit';
var edit_contacts_dlg=新建dijit.Dialog({
标题:“新诊断”,
样式:“宽度:550px;高度:600px;背景:#FFFFFF;”,
id:'edit_contacts_dlg_'+uniqueId,
内容:外
}).show();
var btn=dijit.byId(uniqueId);
connect(btn,“onClick”,这是“stage2”);
dojo.require(“dijit.\u小部件”);
dojo.require(“dijit._模板化”);
require(“dijit.Dialog”);
require(“dijit.form.Button”);
ready(function()){
declare(“edit.ContactTemplate”,[dijit.\u小部件,dijit.\u模板化]{
templateString:“编辑”,
widgetsInTemplate:正确
})
declare(“edit.contacts”,null{
初始化:函数(customerId){
this.customerId=customerId;
var widget=new edit.ContactTemplate();
connect(widget.editbn,“onClick”,这个是“stage2”);
this.editContactDlg=新建dijit.Dialog({
标题:“对话框:”+customerId,
样式:“宽度:200px;高度:80px;背景:#ffffffff;”,
id:“编辑联系人”+customerId,