2

我的 salesforce 页面中有 javascript 函数来验证其中一个联系人是否有未结案件。此函数调用顶点 getter 来获取值。我面临的问题是顶点吸气剂总是返回错误的布尔值。我尝试调试它,一切似乎都正常,但由于某种原因返回的布尔值是错误的。

顶点功能:

 public Boolean openCase{
   get{

        if (Contacts.size() > 0){
            for(cContact wContact: dicContacts.values()){
                 if(wContact.selected){                     
                     if(wContact.con.account.Number_of_open_Financial_Review_Cases__c > 1){

                        return true;
                    } 
                 }           
            }                     
    return false;
   }
   set{}

}

js函数:

 function validateOpenCases(sendEmail){

    doIt = true;
    oc = {!openCase};   // <<== problem here
    alert(oc);
      if (oc)
      {
       doIt=confirm('blabla?');
      }
      if(doIt){
            // do stuff
      }
      else{
        // do nothing
      }
  }
4

1 回答 1

3

您不应该直接在 JavaScript 中绑定 Apex 对象/变量(就像您拥有的那样{!openCase};)。我以前遇到过很多问题。而是使用JavaScript RemotingAjax Toolkit


更新

另一种选择是使用隐藏的 Visualforce 输入来存储绑定的 Visualforce 值。然后你可以在你的 JavaScript 中得到这个值。

这是一个例子:

<apex:page controller="myController">
    <script>
        function getInputEndingWith(endsWith)
        {
            // put together a new Regular Expression to match the 
            // end of the ID because Salesforce prepends parent IDs to
            // all elements with IDs
            var r = new RegExp("(.*)"+endsWith+"$"); 

            // get all of the input elements
            var inputs = document.getElementsByTagName('input');

            // initialize a target
            var target;

            // for all of the inputs
            for (var i = 0; i < inputs.length; ++i)
            {
                // if the ID of the input matches the
                // Regular Expression (ends with)
                if (r.test(inputs[i].id))
                {
                    // set the target
                    target = inputs[i];
                    // break out of the loop because target 
                    // was found
                    break; 
                }
            }

            // return the target element
            return target;
        }

        function validateOpenCases(sendEmail)
        {
            doIt = true;
            oc = getInputEndingWith("OpenCase").value;

            alert(oc);

            if (oc === "true") {
                doIt = confirm('Are you sure?'); 
            }
            if (doIt) {
                // do stuff
            }
            else {
                // do nothing
            }
        }
    </script>

    <apex:form>
        <apex:outputpanel>
            <apex:inputhidden id="OpenCase" value="{!openCase}" />
        </apex:outputpanel>
        <input type="button" class="btn" onclick="validateOpenCases('Send');" value="Validate" />
    </apex:form>
</apex:page>
于 2012-04-20T14:58:14.560 回答