我正在开发一个应用程序,它可以在用户处理内容时自动保存内容。我目前有两种类型的内容保存。保存草稿(全新内容)并更新草稿(现有内容)。
我遇到的问题是,当用户第一次创建新内容时,调用save draft方法。下一次自动保存应该调用更新草稿来更新当前内容。
所有这些都是由两个变量组合在一起的。url.convid(会话ID)和form.messageID(消息ID)。
好的,这是一些代码。
// auto save method.
function autoSave(){
savePath = 'view_message.cfm?action=autoSave' +
'<cfif isDefined("url.convID") neq 0>&convID=<cfoutput>#url.convID#</cfoutput></cfif>&folderID=<cfoutput>#url.folderID#</cfoutput><cfif isDefined("url.profile")>&profile=<cfoutput>#url.profile#</cfoutput></cfif><cfif isDefined("url.isDraft")>&isDraft</cfif>';
ColdFusion.Ajax.submitForm("compForm", savePath, setSaveTime);
autoSaveEvery(30000);
}
// auto save timer
function autoSaveEvery(ms) {
var timeout=setTimeout("autoSave()",ms);
}
// display autosaved message
function setSaveTime(res) {
if (res) {
document.getElementById('messageArea').innerHTML = 'Autosaved at ' + nowFormated();
}
}
自动保存方法首先在用户首次开始键入时调用,并在用户首次开始键入30秒后触发。当触发自动保存时,将运行以下代码。
if(url.action eq 'autoSave'){
if(isDefined('form')){
form = duplicate(form);
if(isDefined('url.isDraft')){
conversationUpdateSave(form);
}else{
messageDraft(form);
}
}
}
然后,此代码调用以下两种方法之一:
function messageDraft(form){
REReplace(form.messageContent,"<[Ss][CcTt][RrYy][IiLl][PpEe][Tt]?[^>]*>.*?</[Ss][CcTt][RrYy][IiLl][PpEe][Tt]?>","","ALL");
REReplaceNoCase(form.messageContent,"</?(a|applet|base|embed|form|frame|frameset|iframe|ilayer|input|link|meta|noframes|noscript|object|param|sound|style|script|select|textarea|table|td|tr|tbody|th)[^>]*>","","ALL");
ReplaceNoCase(form.messageContent,"onmouseover|onmouseout|onclick|onmousedown|onkeydown|onkeyup","","ALL");
LEFT(ReplaceNoCase(form.messageContent,"'","&##39;","All"),3000);
messageVO.setReceiverID(memberCT.getMemberID());
messageVO.setSenderID(lomemberCT.getMemberID());
messageVO.setMessageContent(form.messageContent);
messageVO.setSendMessage(false);
memberGW = createObject("component","com.model.gateway.MessagesGW");
messageCT = memberGW.sMessage_Create(messageVO);
if(url.convID eq 0){
messageVO.setConversationID(messageCT.getConversationID());
url.convID = messageCT.getConversationID();
}
form.messageID = messageCT.getMessageID();
messageCT = messageDisplay();
}
// update a previously saved draft
function conversationUpdateSave(form){
messageVO.setConversationID(url.convID);
messageVO.setMessageID(form.messageID);
messageVO.setMessageContent(form.messageContent);
messageVO.setSendMessage(false);
memberGW = createObject("component","com.model.gateway.MessagesGW");
messageCT = memberGW.sMessage_Update(messageVO);
messageCT = messageDisplay();
}
所以我认为问题是。调用messagedraft方法时,未设置url.convid,因此对autosave的后续调用调用conversationupdatesave方法。
我对这个问题的Ajax部分还比较陌生,如果有人能帮我解决这个问题,我将不胜感激。