无法读取未定义的 属性 'multiSelectLabelText'
Cannot read property 'multiSelectLabelText' of undefined
我就是这样使用dojo的CheckedMultiSelect的,
var MyCheckedMultiSelect = declare(CheckedMultiSelect, {
startup: function() {
this.inherited(arguments);
setTimeout(lang.hitch(this, function() {
this.dropDownButton.set("label", "User Preferences");
}));
}v
var select = new MyCheckedMultiSelect({
dropDown: true,
label: "Preferences",
multiple: true,
name: 'state',
invalidMessage: 'ERROR',
onChange: getValues,
required: true
}, "stateSelect");
form = new Form({
style: 'display:inline'
}, 'formPref');
select.startup();
select._nlsResources.multiSelectLabelText = 'User Preferences';
我想覆盖此小部件的消息“0 item(s) selected”,默认情况下它会出现在其他消息中,例如 "User Preferences".. 所以我正在使用这个
select._nlsResources.multiSelectLabelText = 'User Preferences';
但是我的页面第一次根本没有加载,它挂起并出现以下错误
"Cannot read property 'multiSelectLabelText' of undefined"..提供一些调试此问题的指针..
我猜CheckedMultiSelect
指的是dojox.form.CheckedMultiSelect
如果是,请尝试这样的操作:
var MyCheckedMultiSelect = declare(CheckedMultiSelect, {
postMixInProperties: function() {
this.inherited(arguments);
this._nlsResources.multiSelectLabelText = 'User Preferences';
}
startup: function() {
this.inherited(arguments);
setTimeout(lang.hitch(this, function() {
this.dropDownButton.set("label", "User Preferences");
}));
}
});
覆盖已移入您的 MyCheckedMultiSelect
小部件。
这是CheckedMultiSelect
的原始postMixInProperties
方法:
postMixInProperties: function(){
this.inherited(arguments);
this._nlsResources = i18n.getLocalization("dojox.form", "CheckedMultiSelect", this.lang);
if(this.invalidMessage == "$_unset_$"){ this.invalidMessage = this._nlsResources.invalidMessage; }
},
原始 postMixInProperties
将首先 运行,然后您的自定义小部件的 postMixInProperties
将覆盖 this._nlsResources.multiSelectLabelText
的值
查看代码片段:
require(['dojo/_base/declare', 'dojox/form/CheckedMultiSelect', 'dojo/domReady!'], function(declare, CheckedMultiSelect) {
var MyCheckedMultiSelect = declare(CheckedMultiSelect, {
postMixInProperties: function() {
this.inherited(arguments);
this._nlsResources.multiSelectLabelText = 'This is multiSelectLabelText';
},
startup: function() {
this.inherited(arguments);
this.dropDownButton.set("label", "This is dropDownButton label");
}
});
var x = new MyCheckedMultiSelect({
dropDown: true,
label: "This is MyCheckedMultiSelect label",
multiple: true,
name: 'state',
invalidMessage: 'ERROR',
onChange: function() {},
required: true,
options: [
{ value: 'option1', label: 'label option 1' },
{ value: 'option2', label: 'label option 2' },
{ value: 'option3', label: 'label option 3' }
]
});
x.placeAt(document.getElementById('test'));
x.startup();
});
<script src="//ajax.googleapis.com/ajax/libs/dojo/1.10.4/dojo/dojo.js"></script>
<link rel="stylesheet" type="text/css" href="http://ajax.googleapis.com/ajax/libs/dojo/1.10.4/dojo/resources/dojo.css">
<link rel="stylesheet" type="text/css" href="http://ajax.googleapis.com/ajax/libs/dojo/1.10.4/dijit/themes/tundra/tundra.css">
<link rel="stylesheet" type="text/css" href="http://ajax.googleapis.com/ajax/libs/dojo/1.10.4/dojox/form/resources/CheckedMultiSelect.css">
<div id="test" class="tundra">
</div>
我就是这样使用dojo的CheckedMultiSelect的,
var MyCheckedMultiSelect = declare(CheckedMultiSelect, {
startup: function() {
this.inherited(arguments);
setTimeout(lang.hitch(this, function() {
this.dropDownButton.set("label", "User Preferences");
}));
}v
var select = new MyCheckedMultiSelect({
dropDown: true,
label: "Preferences",
multiple: true,
name: 'state',
invalidMessage: 'ERROR',
onChange: getValues,
required: true
}, "stateSelect");
form = new Form({
style: 'display:inline'
}, 'formPref');
select.startup();
select._nlsResources.multiSelectLabelText = 'User Preferences';
我想覆盖此小部件的消息“0 item(s) selected”,默认情况下它会出现在其他消息中,例如 "User Preferences".. 所以我正在使用这个 select._nlsResources.multiSelectLabelText = 'User Preferences';
但是我的页面第一次根本没有加载,它挂起并出现以下错误 "Cannot read property 'multiSelectLabelText' of undefined"..提供一些调试此问题的指针..
我猜CheckedMultiSelect
指的是dojox.form.CheckedMultiSelect
如果是,请尝试这样的操作:
var MyCheckedMultiSelect = declare(CheckedMultiSelect, {
postMixInProperties: function() {
this.inherited(arguments);
this._nlsResources.multiSelectLabelText = 'User Preferences';
}
startup: function() {
this.inherited(arguments);
setTimeout(lang.hitch(this, function() {
this.dropDownButton.set("label", "User Preferences");
}));
}
});
覆盖已移入您的 MyCheckedMultiSelect
小部件。
这是CheckedMultiSelect
的原始postMixInProperties
方法:
postMixInProperties: function(){
this.inherited(arguments);
this._nlsResources = i18n.getLocalization("dojox.form", "CheckedMultiSelect", this.lang);
if(this.invalidMessage == "$_unset_$"){ this.invalidMessage = this._nlsResources.invalidMessage; }
},
原始 postMixInProperties
将首先 运行,然后您的自定义小部件的 postMixInProperties
将覆盖 this._nlsResources.multiSelectLabelText
查看代码片段:
require(['dojo/_base/declare', 'dojox/form/CheckedMultiSelect', 'dojo/domReady!'], function(declare, CheckedMultiSelect) {
var MyCheckedMultiSelect = declare(CheckedMultiSelect, {
postMixInProperties: function() {
this.inherited(arguments);
this._nlsResources.multiSelectLabelText = 'This is multiSelectLabelText';
},
startup: function() {
this.inherited(arguments);
this.dropDownButton.set("label", "This is dropDownButton label");
}
});
var x = new MyCheckedMultiSelect({
dropDown: true,
label: "This is MyCheckedMultiSelect label",
multiple: true,
name: 'state',
invalidMessage: 'ERROR',
onChange: function() {},
required: true,
options: [
{ value: 'option1', label: 'label option 1' },
{ value: 'option2', label: 'label option 2' },
{ value: 'option3', label: 'label option 3' }
]
});
x.placeAt(document.getElementById('test'));
x.startup();
});
<script src="//ajax.googleapis.com/ajax/libs/dojo/1.10.4/dojo/dojo.js"></script>
<link rel="stylesheet" type="text/css" href="http://ajax.googleapis.com/ajax/libs/dojo/1.10.4/dojo/resources/dojo.css">
<link rel="stylesheet" type="text/css" href="http://ajax.googleapis.com/ajax/libs/dojo/1.10.4/dijit/themes/tundra/tundra.css">
<link rel="stylesheet" type="text/css" href="http://ajax.googleapis.com/ajax/libs/dojo/1.10.4/dojox/form/resources/CheckedMultiSelect.css">
<div id="test" class="tundra">
</div>