问题标签 [viewmodel]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
304 浏览

design-patterns - 两种模型视图设计和模型之间的通信

我有一个包含两个不同部分的对话框。每个部分都使用模型视图设计。
但是当一个模型更新时,第二个模型也必须更新。我想知道是否存在用于在两个模型之间进行通信(更新通知)的最佳实践或设计模式。
这实际上不可能有两个视图和一个模型。

谢谢你的时间

0 投票
1 回答
929 浏览

c# - 自定义 ViewModel 类 - 除非指定前缀,否则并非所有字段都标记为无效

我有一个自定义视图模型,其中有两个字段和一个 linq2sql 实体。所有字段都附加了验证属性。即使所有字段都无效,也只有 linq2sql 类中的字段会在视觉上指示错误,并且视图模型中的字段会正常显示。但是会为所有无效字段显示错误消息。

我的自定义 ViewModel 如下所示:

Book 类是一个 linq2sql 实体,它附加了一个用于验证的元数据类型属性。

存储库中有一个 AddBook 方法,有两个重载。一个采用视图模型,一个采用 Book 类型:

控制器中的 Create 操作如下所示:

我正在使用 xVal 生成客户端验证规则。我的创建视图如下所示:

客户端验证工作正常.. 但是如果我关闭 javascript 然后发回所有字段都会显示表单错误消息,但 Field1 和 Field2 未标记为无效.. 字段中没有添加 css 类,也没有生成跨度标签用于视觉错误指示。

截图 http://img22.imageshack.us/img22/324/26677634.jpg

但是如果我用任何东西给 ViewModel 字段加上前缀

并相应地修改视图,然后一切正常:

我在这里做错了什么?

抱歉让这个帖子这么长..

0 投票
3 回答
6884 浏览

asp.net-mvc - 在 MVC 中优雅地使用 ViewModels 进行 POST 操作

目前我正在将我的域对象传递给我的视图,并从 POST 直接绑定到它们。每个人都说这很糟糕,所以我试图添加 ViewModel 概念。

但是,我找不到一种非常优雅的方法来做到这一点,我想知道其他人的解决方案是什么,不会以一个非常混乱的控制器动作结束。

说一些“添加人员”功能的典型过程如下所示:

  1. 对表示空白 Person 视图模型的视图发出 GET 请求
  2. 回发(in)有效数据
  3. 控制器将发布的数据绑定到人员视图模型上
  4. 如果绑定失败,我需要执行与 (1) 中相同的操作,但需要使用一些数据,而不是空白对象和错误
  5. 如果绑定成功,我需要将虚拟机的属性映射到真实模型上
  6. 验证模型
  7. 如果验证通过:保存人员,提交,将用户详细信息映射到显示 VM 并在视图中返回
  8. 如果验证失败,请执行与 (1) 中相同的操作,但有一些数据和错误

在控制器操作中执行所有这些操作(忽略 GET)当然不是 SRP 或 DRY。

我试图想出一种方法来打破这个过程,以便它确实遵守 SRP,是干净的、模块化的,最重要的是可测试的。

人们对此有何解决方案?

我一直在尝试使用自定义控制器动作调用程序将关注点分成单独的方法、智能模型绑定器和简单的蛮力,但我还没有遇到满意的解决方案。

PS 因为它增加了如此多的复杂性,说服我为什么我什至需要打扰

0 投票
2 回答
3450 浏览

mvvm - Josh Smith 的 MVVM 演示应用程序:将命令添加到 MainWindowViewModel 的命令列表

我有一个关于Josh Smith 在 MVVM 上著名的演示应用程序的问题。

我尝试围绕它构建一个“真正的”应用程序来学习 WPF。

他在包含 2 个命令的 MainWindowViewModel 中创建了这个 CommandsList(创建新的并查看所有客户)。此列表是只读的(为什么?任何特殊原因?)。我认为根据当前选择的工作区添加和删除一些命令会很好。就像在有焦点时编辑或删除客户等等。

我将如何做到这一点?!我可以将其设为普通列表并添加命令吗?或者将命令视图绑定到选定工作区的命令列表而不是主窗口?如何?还有其他方法吗?请分享你的想法!

非常感谢你!

0 投票
1 回答
2253 浏览

wpf - WPF:特定控件/视图/视图模型上的 LostFocus 事件

我正在使用 MVVM 模式在 WPF 中工作,并且通常情况看起来运行良好,因为我的大脑围绕着 WPF 和 MVVM 的细微差别。但是,我目前被困在一个特定的问题上。我的实际应用程序相当复杂,所以为了简化,让我们看一下 Josh Smith关于该模式的近乎定义的文章,并在其中使用该应用程序。

考虑图 2,并假设用户在名字和姓氏字段中输入了一些内容。然后,用户通过单击不同的客户选项卡或可能在同一应用程序中完全不同的视图模型,完全离开工作区(视图模型)。在这种情况下,我希望应用程序询问“嘿,你想保存你的更改吗?是/否/取消”并做出适当的回应。这带来了……挑战。

因为我希望用户能够“取消”第一次通过建议需要 PreviewLostKeyboardFocus (因为我可以设置 Handled=true 并取消焦点转移)。但是,一些用户操作(例如单击不同工作区的选项卡)不会转移键盘焦点。LostFocus 在这方面更好地覆盖了我,但这只是在焦点已经失去之后(当然我可以将其切换回来?)并且确定事件是否来自视图本身存在问题(即,我们要离开整个视图)或者它只是从某个包含的对象中冒出来的。

所有这一切的大图 - 这似乎是视图的一个问题,但这意味着在视图中编写代码而不是魔术视图模型。这让我觉得我没有正确看待这个。

所以我希望我错过了一些重要的概念性的 a-ha,这将使这一切变得清晰。帮助?

0 投票
4 回答
17665 浏览

asp.net - ASP.NET MVC 视图模型模式

编辑:我做了一些更好的东西来填充和读取使用 ViewModels 的视图中的数据,称为ValueInjecterhttp://valueinjecter.codeplex.com/

它由http://prodinner.codeplex.com - 一个 ASP.net MVC 示例应用程序使用

您可以在 prodinner 中看到使用 ViewModel 的最佳方式

使用 ViewModel 存储映射逻辑并不是一个好主意,因为存在重复和 SRP 违规,但现在使用 ValueInjecter 我有干净的 ViewModel 和干映射代码


那是旧的东西,不要使用它:
我在 asp.net mvc 中创建了一个 ViewModel 模式来编辑东西,当你必须制作一个表单来编辑实体并且你必须在表单上放一些东西时,这个模式很有用 - downs 供用户选择一些值

0 投票
1 回答
576 浏览

performance - Linq to SQL:Projections、ViewModels、不可翻译的查询

我的应用程序必须处理大量数据,通常选择大小约为 10000 行。为了提高性能,建议仅选择所需的数据。

当我必须进行计算或任何有意义的业务时,我很乐意选择所有数据以正确实例化我的模型,这样我就可以依赖它的功能。

当仅查看数据(通常在表中)时,这不是我想要的,我想将检索到的数据量限制在绝对最小值。

到目前为止,我已经使用以下方法从我的存储库中获取数据(下面显示的是在存储库中执行所有魔法的方法

这样,我在调用存储库的方法中就有了匿名类型的类型定义,并且我可以透明地使用那里的类型。

每个控制器都可以准确定义要传递给视图的数据,它非常有效,因为我可以直接影响列排序等,而无需处理视图中的网格控件来为我做这件事。我不需要 DataContext 上的任何 LoadOptions,因为它根据选择器计算出来。

现在的问题是,我无法控制传递给我的存储库的选择器。它还可能包含不可翻译的方法调用等。

我的问题是:

  1. 到目前为止,我一直避免创建 ViewModel,因为我害怕类型爆炸。实施它们的最佳方法是什么?我应该让选择器为我做投影吗?
  2. 我是否应该编写不检查任何内容的单元测试,但查询是否无异常执行?
0 投票
4 回答
1638 浏览

jquery - 将 JQuery datepicker 与 ASP.NET MVC ViewModel 一起使用

我一直在尝试在我的 asp.bet mvc 视图中使用 JQuery datepicker(日历)。一切正常,直到我不得不使用 ViewModel:因为我更喜欢使用硬编码的对象图(即<input name="viewmodel.Meeting.Date"...)而不是使用模型绑定器,所以我被一个不起作用的脚本困住了——显然 JQuery 脚本没有'不允许在你的脚本中出现点 - $(#viewmodel.Meeting.Date)...

有任何想法吗?

0 投票
0 回答
26910 浏览

wpf - ViewModel 的 WPF MVVM 单元测试?

我一直在阅读有关使用 MVVM 的好处,尤其是在单元测试方面。所以,现在我需要为我的 ViewModel 编写单元测试。有没有人有这方面的例子?我应该只使用 VS2008 生成单元测试并选择那些看起来很重要的测试吗?

0 投票
2 回答
5185 浏览

c# - 使用 Get 将 ASP.Net MVC 中的 ViewModel 从视图传递到不同的视图

我有一个列表视图,它有一个强类型的 ViewModel,其中包括我正在使用的实体列表以及我随身携带的其他一些会话类型的东西。

单击列表中的项目(Html.ActionLink)以转到详细信息视图时,我可以轻松传递实体 ID。但我也想从 View 传递 ViewModel 的其余部分。

我可以使用各种 QueryString 参数构建 ActionLink,然后自定义 ModelBinder 可以拾取它们并再次为我水合 ViewModel 对象。不过,我不喜欢这样。

我可以在将自定义 ViewModel 发布回同一页面等时使其重新水化,但是如何在不使用 ModelBinder 的情况下使用 GET 到另一个 View 并将 ViewModel 对象简单地放置为目标动作方法中的参数?