小编Dal*_*onF的帖子

如何在订阅时获取Observer的"当前"值

我很难熟悉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不会那样工作(仅在"订阅后"打印).我怎样才能得到我追求的结果?

javascript rxjs

48
推荐指数
1
解决办法
2万
查看次数

在TypeScript中使单个属性可选

在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)

但这并不是我想要的,因为我必须指定所需的所有类型而不是可选的类型.

typescript

14
推荐指数
6
解决办法
8109
查看次数

WebBrowser在ObjectForScripting上声称"对象类型对COM不可见"

我正在尝试使用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.

javascript c# wpf

6
推荐指数
1
解决办法
2826
查看次数

使用MessageBox.Show()阻止所有窗口

我目前正在开发一个有多个窗口的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)

打开对话框将完全冻结第一个窗口.如果您单击它或尝试任何类型的交互,操作系统会"叮当作响!" 声音并闪烁消息框上的边框.但是你打开的所有其他窗口都可以被点击,移动,调整大小等等,这就是我想要阻止的.

c# windows wpf

2
推荐指数
1
解决办法
5883
查看次数

标签 统计

c# ×2

javascript ×2

wpf ×2

rxjs ×1

typescript ×1

windows ×1