Javascript 在给定新值时重写字符串

Javascript 在给定新值时重写字符串,javascript,c#,html,Javascript,C#,Html,这个题目听起来很奇怪,但我在用正确的英语提问时遇到了困难。我想做什么 String question = ""; String message = "This message has the following question:\n" + question; ...//later on the code question = question.path.readingFromAFile(FileAddress); 因此,我正在构建一条通过邮件发送的消息,我需要检索一段html文件中的文

这个题目听起来很奇怪,但我在用正确的英语提问时遇到了困难。我想做什么

String question = "";

String message = "This message has the following question:\n" + question;

...//later on the code

question = question.path.readingFromAFile(FileAddress);
因此,我正在构建一条通过邮件发送的消息,我需要检索一段html文件中的文本并将其插入到消息中


问题是:在我需要构建消息的地方,文件还没有正确存在,而且由于它不存在,我无法找到它(显然)。我的想法是在消息中输入一个“空”变量,在创建文件时,我会更新变量值,并将其发送到之前创建的字符串。然而,我不确定这是否可行,我考虑过像占位符之类的东西,但我不确定这将如何工作。如果您能提供任何帮助,我将不胜感激,我也为之前的误解道歉,我很难用英语正确解释这个问题,如果有任何不清楚的地方,请告诉我。

听起来您需要字符串模板

一个类似的问题

有一些图书馆可以帮助你喜欢 及
听起来你需要字符串模板

一个类似的问题

有一些图书馆可以帮助你喜欢 及

免责声明
因为这大概是关于插入一个字符串,所以我可以建议一个简单的解决方案。然而;如果您的范围大大扩展(例如,要填充的模板字段太多,或者文本块太大),我建议您考虑一个更健壮的解决方案

人们通常只使用
String.format()
的format参数作为字符串文字,但您也可以更早地创建一个格式字符串,并且只在需要填充模板时调用
String.format()
,使用您提前编写的格式字符串

免责声明
因为这大概是关于插入一个字符串,所以我可以建议一个简单的解决方案。然而;如果您的范围大大扩展(例如,要填充的模板字段太多,或者文本块太大),我建议您考虑一个更健壮的解决方案


人们通常只使用
String.format()
的format参数作为字符串文字,但您也可以更早地创建一个格式字符串,并且只在需要填写模板时调用
String.format()
,使用您提前编写的格式字符串。

所有其他答案都涉及模板化。但在我看来,你可能想要一个出版商订阅模式

设置:您需要一个class
MyClass
来拥有一个事件广播器。然后无论什么时候发生了什么,你都会调用这个。但是你的调用者不在乎谁在看

public class MyClass {

    public virtual event EventHandler BroadcastHandler;

    public virtual void BroadcastEvent(string question) {
        var broadcastHandler = BroadcastHandler;
        var eventArg = new ObservableEvent(question);

        if(broadcastHandler != null)
            broadcastHandler(this, eventArg);
    }

    public void UploadFile() {
        // Some logic... etc...

        // Invoke the event
        this.BroadcastEvent(question.path.readingFromAFile(FileAddress))
    }
}
然后您需要一个
观察者
类来观察此特定事件:

public class Observer {
    private readonly object syncRoot = new object();

    public string Question { get; private set; }

    // Basic constructor.
    public Observer() {}

    public void HandleEvent(object sender, EventArgs args) {
        lock(this.syncRoot) {
            var theEvent = (ObservableEvent)eventArgs;
            this.Question = theEvent.Question;
        }
    }

}

public class ObservableEvent : EventArgs {
    public string Question {get; private set;}

    public ObservableEvent(string question) {
        this.Question = question;
    }
}
告诉观察员订阅活动:

var observer = new Observer();
var myClass = new MyClass();
myClass.BroadcastHandler += observer.HandleEvent;
现在只需使用字符串模板来使用您的问题:

var message = $"This message has the following question:\n{observer.Question}"

所有其他答案都涉及模板。但在我看来,你可能想要一个出版商订阅模式

设置:您需要一个class
MyClass
来拥有一个事件广播器。然后无论什么时候发生了什么,你都会调用这个。但是你的调用者不在乎谁在看

public class MyClass {

    public virtual event EventHandler BroadcastHandler;

    public virtual void BroadcastEvent(string question) {
        var broadcastHandler = BroadcastHandler;
        var eventArg = new ObservableEvent(question);

        if(broadcastHandler != null)
            broadcastHandler(this, eventArg);
    }

    public void UploadFile() {
        // Some logic... etc...

        // Invoke the event
        this.BroadcastEvent(question.path.readingFromAFile(FileAddress))
    }
}
然后您需要一个
观察者
类来观察此特定事件:

public class Observer {
    private readonly object syncRoot = new object();

    public string Question { get; private set; }

    // Basic constructor.
    public Observer() {}

    public void HandleEvent(object sender, EventArgs args) {
        lock(this.syncRoot) {
            var theEvent = (ObservableEvent)eventArgs;
            this.Question = theEvent.Question;
        }
    }

}

public class ObservableEvent : EventArgs {
    public string Question {get; private set;}

    public ObservableEvent(string question) {
        this.Question = question;
    }
}
告诉观察员订阅活动:

var observer = new Observer();
var myClass = new MyClass();
myClass.BroadcastHandler += observer.HandleEvent;
现在只需使用字符串模板来使用您的问题:

var message = $"This message has the following question:\n{observer.Question}"

您可以使用带有真实条件的while循环,并在读取返回所需值时将其中断,或者使用.net计时器并设置间隔,在读取完成时将其中断。您可以使用模板,或者稍后简单地创建完整问题。您可以使用带有真实条件的while循环,并在读取返回所需值时将其中断,或者使用.net计时器设置一个时间间隔,在阅读完成后将其打断。您可以使用模板,也可以稍后创建完整的问题。