小编Koe*_*enJ的帖子

在控制器之间传递数据

我说要学习AngularJS,来自很多不同的MV*框架.我喜欢这个框架,但是我在控制器之间传递数据时遇到了麻烦.

假设我有一个带有一些输入(input.html)和控制器的屏幕,让我们说InputCtrl.
此视图上有一个按钮,可以将您带到另一个屏幕,让我们说使用控制器ApproveCtrl批准(approve.html).
此ApproveCtrl需要来自InputCtrl的数据.这似乎是更大的应用程序中非常常见的情况.

在我以前的MV*框架中,这将像(伪代码)一样处理:

   var self = this;
   onClick = function() {
          var approveCtrl = DI.resolve(ApproveCtrl);
          approveCtrl.property1 = self.property1;
          approveCtrl.property1 = self.property2;
          self.router.show(approveCtrl);  
   }            
Run Code Online (Sandbox Code Playgroud)
  • 它会像Controller一样工作.您首先创建控制器,有机会将其置于正确的状态; 然后创建视图.

现在,在AngularJS中,我正在处理这个:

 var self = this;
 onClick = function(){
          self.$locationService.path('approve');       
 }
Run Code Online (Sandbox Code Playgroud)
  • 这就像View-first一样.您说要导航到哪个视图/路径,Controller由框架创建.

我发现很难控制创建的Controller的状态并将数据传递给它.我已经看过并尝试过以下方法,但在我看来,所有这些都有自己的问题:

  1. 将共享服务注入InputCtrl和ApproveCtrl,并将所有数据放在此服务上共享
    • 这看起来像是一个肮脏的解决方法; 共享服务中的状态变为全局状态,而我只需要它将数据传递给ApproveCtrl
    • 这个共享服务的生命周期比我需要的时间长 - 只是为了将数据传递给ApproveCtrl
  2. 传递$ routeParams中的数据
    • 传递大量参数时,这会变得非常混乱
  3. 使用$ scope事件
    • 从概念上讲,这不是我会使用事件的东西 - 我只需要将数据传递给ApproveCtrl,没有任何事件是什么
    • 这非常麻烦; 我必须首先向父母发送一个事件,然后将其广播给它的孩子

我在这里错过了什么吗?我创造了太多小型控制器吗?我是否试图在这里过多地保留其他框架的习惯?

angularjs

37
推荐指数
2
解决办法
3万
查看次数

是否可以为整个WPF 4.0应用程序禁用UI自动化?

我们正在开发一个供内部使用的WPF 4.0应用程序.
在某些客户端,由于UI自动化,我们遇到了巨大的性能问题(这些客户端安装了平板电脑服务笔,触摸等软件).

这是WPF 4.0的已知问题,例如:


我们已经能够在规格非常有限的机器上重现这个问题.在此机器上打开WPF窗口需要:

  • 00:00:02 - 没有安装任何UI自动触发软件
  • 00:01:41 - 安装了UI自动触发软件(RoboForm用于此测试)
  • 00:00:09 - 安装了UI自动触发软件,并应用了修补程序KB2484841

正如您所看到的,安装修补程序KB2484841是一项巨大的改进,但仍然没有安装ui Automation触发软件时运行速度快.
此外,我们无法控制在客户端安装哪些软件,因此很难为所有客户端推出此修复程序.


因此,是否可以为整个WPF应用程序"关闭"UI自动化?我知道它可以在每个UserControl的基础上完成,但它是否可以作为一个整体的应用程序?

我已经尝试过这篇文章中提供的代码,但没有成功.


谢谢你的时间,
科恩

.net wpf ui-automation microsoft-ui-automation

23
推荐指数
2
解决办法
5155
查看次数

C#:在对象之间创建强引用,而不引用另一个对象

假设我有2个类,Foo和Bar.Foo没有(也没有)与Bar的关系.

但是,我想要一个bar实例保持活着,只要它的foo实例保持活着.有没有办法这样做,没有foo实际引用吧?

谢谢,Koen

c#

12
推荐指数
1
解决办法
1849
查看次数

Prism的RegionManager视图切换性能

我正在对使用 PRISM 库编写的 WPF 应用程序进行性能分析。在此应用程序中,从一个视图导航到另一视图特别慢,尤其是在远离“重”视图时。注意:

  • 来回导航时视图会被缓存并且不会重新构建
    (PRISM 将所有视图保留在 SingleActiveRegion 中的结果)
  • 我知道由于 xaml 解析、JIT'ing 等原因,第一次构建视图可能会很慢。但是这个问题是关于导航仍然很慢,即使是在第一次打开视图之后

使用 PRISM 库,区域通常在 ContentControl 上实现,例如:

<ContentControl regions:RegionManager.RegionName="MAIN" />
Run Code Online (Sandbox Code Playgroud)

因此,在 MAIN 区域中切换视图将更新此 ContentControl 的“内容”(从源代码中可以看出)。将 UI 元素设置和切换为 ContentControl 的“内容”会对性能产生副作用(请参阅此博文)。

为了克服这种行为,我为网格实现了一个自定义RegionAdapterBase ( CachingGridRegionAdapter.cs ),它基本上添加了作为子项导航的所有视图,并隐藏了所有非活动视图。

性能提升是巨大的;现在,从一个视图导航到另一个视图是即时的。问题:这种方法有什么缺点吗?

  • 就内存而言,我没有看到问题,因为无论如何所有视图都被 PRISM 保存在内存中
  • 拥有一个大的视觉树,其中许多部分具有“可见性”=“折叠”,是否有缺点?


如果还有其他方法可以解决这个问题,请告诉我。


感谢您抽出时间,
科恩

wpf performance prism

8
推荐指数
0
解决办法
1247
查看次数

文档数据库:数据模型迁移

像我们大多数人一样,我来自关系数据库世界,而我目前正在研究文档数据库世界的可能性。我关心的问题之一是如何处理数据模型随时间的变化(添加新属性,重命名属性,添加关系等)。

在关系数据库中,通常按以下方式处理:

  • 编写数据库迁移
    ->修改数据库架构
    ->修复现有行的数据(通常包含一些业务逻辑)
  • 修改代码(ORM更新,..)


使用文档数据库时,我觉得更改数据模型要容易得多。无需更新数据库架构,大多数情况下,它只是添加一个属性..而所有“正常工作”。我想知道团队如何在现实生活中管理带有文档数据库的企业项目中的此类迁移:

  • 是否有严格的政策来更改存储在文档数据库中的类型?例如,对这种类型的每次更改是否都需要迁移以更新现有文档?
  • 结果,数据模型(存储在文档db中的类型)和业务模型之间是否存在明显的分隔?

谢谢您的时间,
科恩

mongodb nosql ravendb

5
推荐指数
1
解决办法
168
查看次数

Powershell:将json字符串传递给curl

我正在尝试使用curl将一个来自powershell脚本的JSON字符串传递给build.phonegap.com api.
根据phonegap的论坛,当在Windows机器上运行时,JSON数据必须格式化为:

curl.exe -ku user@email:mypass -X PUT -d "data={\"password\":"\keypass\"}" https://build.phonegap.com/api/v1/key
Run Code Online (Sandbox Code Playgroud)


实际上,从命令行调用时,这确实运行良好.
但是,当我尝试在powershell脚本中调用它时,双引号似乎被剥离.

到目前为止,我尝试过:

  • 将JSON放在单引号字符串中:
    curl.exe -ku user@email:mypass -X PUT -d '"data={\"password\":\"keypass\"}"'  https://build.phonegap.com/api/v1/key
  • 将JSON放在单引号字符串中,而不使用DOS转义反斜杠:
    curl.exe -ku user@email:mypass -X PUT -d '"data={"password":"keypass"}"'  https://build.phonegap.com/api/v1/key
  • 将JSON放在单引号字符串中,转义双引号和反斜杠(带有反斜杠的DOS样式):
    curl.exe -ku user@email:mypass -X PUT -d '\"data={\\\"password\\\":\\\"keypass\\\"}\"'  https://build.phonegap.com/api/v1/key
  • 将JSON放在双引号字符串中,使用powershell返回刻度字符'转义双引号:
    curl.exe -ku user@email:mypass -X PUT -d "`"data={\`"password\`":\`"build*2014`\`"}`""  https://build.phonegap.com/api/v1/key



知道怎么做到这一点?

谢谢你的时间,科恩

powershell curl

4
推荐指数
2
解决办法
6654
查看次数