priority-web-sdk:实现选择字段
priority-web-sdk: Implementing a choose-field
我正在尝试使用 <select>
控件实现选择字段。
<div id="container" onchange="fieldChangeHandler(event)">
...
<div class="item" >
<label>Status</label>
<select id="STATDES" onfocus="focusdiv(event)" onblur="defocusdiv(event)"></select>
</div>
在 updateFields()
处理程序中,我确定了控件类型:
function updateFields(result) {
if (result[myForm.name]) {
var fields = result[myForm.name][1];
for (var fieldName in fields) {
var el = document.getElementById(fieldName);
if (el) {
switch (el.nodeName){
case "INPUT":
el.value = fields[fieldName];
break;
case 'SELECT':
fill(el, fields[fieldName]);
el.value = fields[fieldName];
break;
};
};
}
}
}
...如果控件是 <select>
,我会通过调用 choose
:
的形式填写选项
function fill(el, sel){
myForm.choose(el.id, "").then(
function (searchObj) {
var i, ch;
$('#'+el.id).empty();
for (i in searchObj.ChooseLine) {
ch = searchObj.ChooseLine[i];
if (ch.string1 == sel){
$("#"+el.id).append('<option selected value="'+ ch.string1 +'">'+ ch.string1 +'</option>');
} else {
$('#'+el.id).append('<option value="'+ ch.string1 +'">'+ ch.string1 +'</option>');
};
};
},
function (serverResponse) {
alert(serverResponse.message);
}
);
};
<select>
onchange
事件对 fieldChangeHandler
的后续调用调用加载表单上的 fieldUpdate
方法:
function fieldChangeHandler(event) {
console.log("%s=%s", event.srcElement.id, event.target.value);
myForm.fieldUpdate(event.srcElement.id, event.target.value);
}
在我尝试保存当前表单记录之前一切正常。
function saveHandler() {
myForm.saveRow(
0,
function(){
console.log("Row Saved.");
},
function(serverResponse){
console.log("%j", serverResponse);
});
}
我得到以下输出:
Object {type: "error", ...}
code:"stop"
fatal:false
form:Object
message:"Status missing."
type:"error"
__proto__:Object
如何覆盖 saveRow
函数以使其从 <select>
控件检索数据?
您必须在 choose
参数中指定当前值。当我(错误)阅读文档时,它不会从当前记录中读取它..
Note: If the field currently cotains a value, it will automatically be
filled in as fieldValue, even if a different fieldValue was specified.
因此,fill
函数应如下所示...
function fill(el, sel){
myForm.choose(el.id, sel).then(
...
};
我只是想指出一点。选择方法:myform.choose
不一定在字段更新后调用。
我知道在你的情况下,选择列表为每个字段更新获得不同的值,你需要更新你的 select。这很酷,但如果有人使用字段更新后未更改的选择列表,最好只调用此方法一次!
写在这里只是为了澄清有关 choose
方法的事情:)
我正在尝试使用 <select>
控件实现选择字段。
<div id="container" onchange="fieldChangeHandler(event)">
...
<div class="item" >
<label>Status</label>
<select id="STATDES" onfocus="focusdiv(event)" onblur="defocusdiv(event)"></select>
</div>
在 updateFields()
处理程序中,我确定了控件类型:
function updateFields(result) {
if (result[myForm.name]) {
var fields = result[myForm.name][1];
for (var fieldName in fields) {
var el = document.getElementById(fieldName);
if (el) {
switch (el.nodeName){
case "INPUT":
el.value = fields[fieldName];
break;
case 'SELECT':
fill(el, fields[fieldName]);
el.value = fields[fieldName];
break;
};
};
}
}
}
...如果控件是 <select>
,我会通过调用 choose
:
function fill(el, sel){
myForm.choose(el.id, "").then(
function (searchObj) {
var i, ch;
$('#'+el.id).empty();
for (i in searchObj.ChooseLine) {
ch = searchObj.ChooseLine[i];
if (ch.string1 == sel){
$("#"+el.id).append('<option selected value="'+ ch.string1 +'">'+ ch.string1 +'</option>');
} else {
$('#'+el.id).append('<option value="'+ ch.string1 +'">'+ ch.string1 +'</option>');
};
};
},
function (serverResponse) {
alert(serverResponse.message);
}
);
};
<select>
onchange
事件对 fieldChangeHandler
的后续调用调用加载表单上的 fieldUpdate
方法:
function fieldChangeHandler(event) {
console.log("%s=%s", event.srcElement.id, event.target.value);
myForm.fieldUpdate(event.srcElement.id, event.target.value);
}
在我尝试保存当前表单记录之前一切正常。
function saveHandler() {
myForm.saveRow(
0,
function(){
console.log("Row Saved.");
},
function(serverResponse){
console.log("%j", serverResponse);
});
}
我得到以下输出:
Object {type: "error", ...}
code:"stop"
fatal:false
form:Object
message:"Status missing."
type:"error"
__proto__:Object
如何覆盖 saveRow
函数以使其从 <select>
控件检索数据?
您必须在 choose
参数中指定当前值。当我(错误)阅读文档时,它不会从当前记录中读取它..
Note: If the field currently cotains a value, it will automatically be
filled in as fieldValue, even if a different fieldValue was specified.
因此,fill
函数应如下所示...
function fill(el, sel){
myForm.choose(el.id, sel).then(
...
};
我只是想指出一点。选择方法:myform.choose
不一定在字段更新后调用。
我知道在你的情况下,选择列表为每个字段更新获得不同的值,你需要更新你的 select。这很酷,但如果有人使用字段更新后未更改的选择列表,最好只调用此方法一次!
写在这里只是为了澄清有关 choose
方法的事情:)