0

我有全局上下文文档 currentDoc 并使用 currentDoc 的响应重复控制。
在重复控制中,我有 2 个字段:
1)组合框
2)编辑框,由组合框计算可见:

var temp = respDoc.getItemValueString( "Combobox1");
return temp == "a";

Onchange 事件 ComboBox 我更新重复控件。
我有按钮“添加响应”(创建/保存响应和更新重复控制)
它的工作。但是..如果我创建响应并保存它,计算可见的字段重置为“”并且不保存。如果我将文本重新输入到 Editbox 并重新保存,那么好的。仅在重新保存后有效。没有错误。可能你知道,什么问题?

源代码

<xp:this.data>
        <xp:dominoDocument var="curDoc" formName="test"></xp:dominoDocument>
    </xp:this.data>

    <xp:repeat id="repeat1" rows="30" var="respDoc"
        repeatControls="false"
        indexVar="respDocIndex" value="#{javascript:return curDoc.getDocument().getResponses();}">
        <xp:panel id="panel1">
            <xp:table>
                <xp:tr>
                    <xp:td style="width:150.0px">
                        <xp:comboBox id="comboBox1" style="width:95%"
                            value="#{respDoc.combobox}" required="false">
                            <xp:selectItem
                                itemLabel="Email" itemValue="a">
                            </xp:selectItem>
                            <xp:selectItem itemLabel="UserName"
                                itemValue="b">
                            </xp:selectItem>

                            <xp:eventHandler event="onchange"
                                submit="true" refreshMode="partial" refreshId="repeat1">
                            </xp:eventHandler>
                        </xp:comboBox>
                    </xp:td>
                    <xp:td>
                    <xp:inputText id="inputText2"
                        value="#{respDoc.editbox}" maxlength="20">
                        <xp:this.rendered><![CDATA[#{javascript://return true    <---- if uncomment it, then all work
var temp = respDoc.getItemValueString( "combobox");
return temp == "b";}]]></xp:this.rendered>
                    </xp:inputText></xp:td>
                    <xp:td>
                        <xp:button value="Save" id="button4">
                            <xp:eventHandler event="onclick"
                                submit="true" refreshMode="partial" refreshId="repeat1">
                                <xp:this.action><![CDATA[#{javascript:respDoc.save();}]]></xp:this.action>
                            </xp:eventHandler></xp:button>
                    </xp:td>
                </xp:tr>
            </xp:table>
        </xp:panel>
    </xp:repeat>
    <xp:button value="Add Response" id="button2">
        <xp:eventHandler event="onclick" submit="true"
            refreshMode="partial" refreshId="repeat1">

            <xp:this.action><![CDATA[#{javascript:if(curDoc.isNewNote())
    curDoc.save();
var doc:NotesDocument = database.createDocument();
doc.replaceItemValue("Form", "test");
doc.makeResponse(curDoc.getDocument());
doc.save();}]]></xp:this.action>

        </xp:eventHandler>
    </xp:button>
4

1 回答 1

2

你的方法有很多问题:

  1. 更改复选框时启动服务器往返,这是表单的意外行为
  2. 未保存的文档不能有响应,因此您不应显示重复
  3. 当您创建一个新文档时,您没有为“组合框”项分配任何值,因此您的测试temp =="b"失败。
  4. 未渲​​染时,不会将任何值发送回服务器,这可能不是您想要的

我会用style="display : none" to hide the field on the client side and have the event only run on the client. also add a value to your combobox when creating a new document:

 var doc:NotesDocument = database.createDocument();
 doc.replaceItemValue("Form", "test");
 doc.makeResponse(curDoc.getDocument());
 doc.replaceItemValue("Combobox1","a");
 doc.save();
 doc.recyle();

希望有帮助

于 2013-06-03T16:41:14.020 回答