【问题标题】:priority-web-sdk: Implementing a choose-fieldpriority-web-sdk:实现选择字段
【发布时间】:2017-06-24 08:48:22
【问题描述】:

我正在尝试使用 <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;

                };
            };
        }
    }
}

...如果控件是&lt;select&gt;,我会通过调用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);

        }

    );
};

&lt;select&gt;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 函数以使其从&lt;select&gt; 控件中检索数据?

【问题讨论】:

    标签: javascript erp


    【解决方案1】:

    您必须在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(
    
                    ...
    
    };
    

    【讨论】:

    【解决方案2】:

    我只想指出一点。字段更新后不一定会调用选择方法:myform.choose

    我了解在您的情况下,选择列表会为每个字段更新获取不同的值,并且您需要更新您的选择。这很酷,但如果有人使用在字段更新后未更改的选择列表,最好只调用一次此方法!

    写在这里是为了澄清choose 方法的事情:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多