我很难熟悉RxJs的一个特定部分:当你订阅一个Observable时,你只能订阅来自该Stream的任何未来事件.与Promises相比,如果承诺已经解决,无论何时打电话,您都会获得该值then().
这是一个代码示例:
var subject = new Rx.Subject();
subject.onNext('old value');
subject.onNext('before subscription');
subject.subscribe(function(val) {
document.write(val);
});
subject.onNext('after subscription');Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/2.3.24/rx.all.js"></script>Run Code Online (Sandbox Code Playgroud)
我希望看到"订阅前"和"订阅后"都打印出来,虽然我认为"旧价值"会被取消.但似乎RxJs不会那样工作(仅在"订阅后"打印).我怎样才能得到我追求的结果?
在TypeScript中,2.2 ......
假设我有一个Person类型:
interface Person {
name: string;
hometown: string;
nickname: string;
}
Run Code Online (Sandbox Code Playgroud)
我想创建一个返回Person的函数,但不需要昵称:
function makePerson(input: ???): Person {
return {...input, nickname: input.nickname || input.name};
}
Run Code Online (Sandbox Code Playgroud)
应该是什么类型的input?我正在寻找一种动态方式来指定一个类型,Person除了nickname可选(nickname?: string | undefined)之外.到目前为止,我发现的最接近的是:
type MakePersonInput = Partial<Person> & {
name: string;
hometown: string;
}
Run Code Online (Sandbox Code Playgroud)
但这并不是我想要的,因为我必须指定所需的所有类型而不是可选的类型.
我正在尝试使用WPF WebBrowser控件在C#和JavaScript之间建立互操作.到目前为止,C# - > JavaScript调用工作得很好,但我无法使JavaScript-> C#运行.
我为对象创建了一个类:
[ComVisible(true)]
class BrowserClient
{
private MainWindow owner;
public string id = "browser-client";
public BrowserClient(MainWindow owner)
{
this.owner = owner;
}
public void sendMessage(string date)
{
owner.OnReceiveMessage(date);
}
}
Run Code Online (Sandbox Code Playgroud)
注意该ComVisible属性.
但是当我在Window_Loaded事件中设置ObjectForScripting属性时:
webBrowser.ObjectForScripting = new BrowserClient(this);
Run Code Online (Sandbox Code Playgroud)
我得到以下(非常混乱)异常:
PresentationFramework.dll中出现未处理的"System.ArgumentException"类型异常
附加信息:COM不可见对象类型.您需要将ComVisibleAttribute属性设置为True.
不用说,我很困惑.这里发生了什么?
更新:值得一提的是,我在Windows 8.1上使用.NET 4.0和Visual Studio 2013 Express for Desktop.
我目前正在开发一个有多个窗口的WPF应用程序.在"主"窗口中,您应该能够关闭整个应用程序.在关闭应用程序之前,客户端希望它显示一个对话框,该对话框基本上询问"您确定要关闭应用程序"并阻止其他所有窗口,直到用户回答.
我目前正在使用MessageBox.Show()来创建此对话框,但由于某种原因它只会阻止主窗口.
这是我所说的最简单的例子; 如果您使用两个按钮创建WPF窗口:
private void openChildWindowButton_Click(object sender, RoutedEventArgs e)
{
var window = new ChildWindow();
window.Show();
}
private void openDialogButton_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show(this, "This should freeze all other windows");
}
Run Code Online (Sandbox Code Playgroud)
打开对话框将完全冻结第一个窗口.如果您单击它或尝试任何类型的交互,操作系统会"叮当作响!" 声音并闪烁消息框上的边框.但是你打开的所有其他窗口都可以被点击,移动,调整大小等等,这就是我想要阻止的.