priority-web-sdk: Implementing a choose-field

[亡魂溺海] 提交于 2019-12-11 10:45:42

问题


I'm trying to implement a choose-field with a <select> control.

<div id="container" onchange="fieldChangeHandler(event)">

...

<div class="item" >
    <label>Status</label>
    <select id="STATDES" onfocus="focusdiv(event)" onblur="defocusdiv(event)"></select>
</div>

In the updateFields() handler I identify the control type:

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;

                };
            };
        }
    }
}

...And if the control is a <select> I fill in the options with a call to the form 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);

        }

    );
};

Subsequent calls to the fieldChangeHandler by the <select> onchange event call the fieldUpdate method on the loaded form:

        function fieldChangeHandler(event) {
            console.log("%s=%s", event.srcElement.id, event.target.value);
            myForm.fieldUpdate(event.srcElement.id, event.target.value);

        }

This all works fine till I try to save the current form record.

function saveHandler() {
    myForm.saveRow(
        0, 
        function(){
            console.log("Row Saved.");
        }, 
        function(serverResponse){
            console.log("%j", serverResponse);
        });
}

where I get the following output:

Object {type: "error", ...}
code:"stop"
fatal:false
form:Object
message:"Status missing."
type:"error"
__proto__:Object

How do I override the saveRow function to make it retrieve it's data from the <select> control please?


回答1:


You MUST specify the current value in choose parameters. It won't read it from the current record as I (mis)read the docs..

Note: If the field currently cotains a value, it will automatically be 
filled in as fieldValue, even if a different fieldValue was specified.

So, the fill function should look like this...

function fill(el, sel){
    myForm.choose(el.id, sel).then(

                ...

};



回答2:


I just want to point something out. The choose method : myform.choose is not necessarily called after a field update.

I understand that in ur case the choose list gets different values for each field update and that u need to update ur select. Which is cool but in case someone uses a choose list that is not changed after fields updates it is better to call this method only once!

Just writing it here to clarify things about the choose method :)



来源:https://stackoverflow.com/questions/44734620/priority-web-sdk-implementing-a-choose-field

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!