我有' phone_dlg_manager'构造函数及其私有方法show
和init_country_code_combobox
。对话框引用保存在phone_dlg
变量中。 show
方法会触发init_country_code_combobox
,我有两个选择:
1)明确传递country_combobox
方法所需的变量init_country_code_combobox
:
function phone_dlg_manager(ctx, open_dlg_button, edit_ctrl, item)
{
var phone_dlg;
show();
function show()
{
phone_dlg = ctx.application.ui.create_dialog(0, "PhoneEditorDlg");
init_country_code_combobox(phone_dlg.country);
read_to_dialog_controls(this._form_item);
phone_dlg.visible = true;
}
function init_country_code_combobox(country_combobox)
{
country_combobox.items.clear();
country_combobox.items.start_adding();
country_combobox.items.finish_adding();
}
}
2)由于phone_dlg
可通过闭包访问init_country_code_combobox
,因此我可以访问我需要的属性而无需显式传递变量:
function phone_dlg_manager(ctx, open_dlg_button, edit_ctrl, item)
{
var phone_dlg;
show();
function show()
{
phone_dlg = ctx.application.ui.create_dialog(0, "PhoneEditorDlg");
init_country_code_combobox(phone_dlg.country);
read_to_dialog_controls(this._form_item);
phone_dlg.visible = true;
}
function init_country_code_combobox()
{
var country_combobox = phone_dlg.country;
country_combobox.items.clear();
country_combobox.items.start_adding();
country_combobox.items.finish_adding();
}
}
第二个选项在阅读代码时似乎更容易理解,但它使init_country_code_combobox
函数知道的比它需要的多。我应该选择哪个选项?
感谢
答案 0 :(得分:1)
这主要是风格问题。选项1更简洁,更具可扩展性,因为您可以使用init_country_code_combobox()
初始化多个对话框。但如果不太可能这样做,选项2并非不合理。