问题标签 [composite]

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 投票
4 回答
6963 浏览

asp.net - ASP.net 动态创建控件事件处理

本质上,我在页面加载时动态添加了一个占位符。

然后我有一个复合控件添加到占位符并在运行时显示特定页面事件。复合控件有一个按钮。我有一个用于复合控件中可用按钮的公共事件处理程序,但实际上并没有直接访问页面代码中的此事件处理程序。

要显示控件,我会进行以下调用,例如:

然后在我会的页面上protected void OnClick(object o, EventArgs args) {}

当然,当我调用create()我的事件处理程序时,我会将事件处理程序连接到复合控件的按钮单击事件。到目前为止,一切都很好。连接按钮后,按钮单击按预期返回到控件。但是,该事件永远不会返回到页面的事件处理程序。

我意识到问题是在回发时发生的。然而,尝试在 init、load 或 createchildcontrols 上连接按钮都无法保持连接到位,因此可以在页面上处理事件。我想要的是能够在运行时将事件处理程序传递给复合控件,并让复合控件在回发时正确地将事件发送回页面。

有趣的是,如果我使用自定义事件参数调用 OnBubble,我可以在页面上捕获冒泡事件。但问题是我的占位符在页面上,所以当我尝试调用MyControl.Create()UserControl 时,例如,气泡会转到页面而不是 UserControl(如预期的那样)。因此,我更喜欢声明事件处理程序而不是覆盖的原因OnBubble(UserControls 和其他声明 MyControl 的控件基本上会使它对按钮单击事件无用)。

我希望有人对这个问题有所了解。这似乎是一个有趣的问题,但除了在页面上显式声明控件并直接在标记或页面加载中连接事件之外,可能没有其他解决方案。我会考虑让按钮进行异步回调,但如果可能的话,我更愿意使用标准的 ASP.NET 事件处理。

谢谢!

添加说明:该MyControl.Create()调用实际上生成了一个事件,该事件调用了复合控件的Create()方法。这一切都很好,但值得注意的是该MyControl.Create()方法无法直接访问控件。这应该是有道理的,因为控件被添加到页面onload上而不是在标记中。

更多代码:

编辑:我尝试将事件处理程序存储在 Session 中并在回发时连接按钮是成功的。我不认为这是一种好的做法,我认为它实际上并没有达到我的目的。例如,在这种情况下,页面上的事件按预期执行,但具有非标准页面行为。例如, Response.Redirect() 会引发异常。这应该是有道理的,因为事件处理程序可能在回发期间丢失了状态信息。一些想法: 1.我是否可以创建一个与此控件相关的自定义气泡事件?这似乎是合理的,但是页面回发的问题再次让我遇到了同样的问题,即气泡应该去哪里。所以,当我调用 create() 时,我可以自动将 UserControl 注册为气泡的目的地吗?似乎很难。2. 在页面生命周期中的某个时刻,我可以在 UserControl 声明的事件处理程序上重新连接事件,以便在回发时正确调用委托?这似乎是我所缺少的。事件处理程序是在回发时创建的,但由于在 OnClick 期间未在 UserControl 中重新创建而丢失。我不希望 UserControl 必须显式地重新创建事物,而是希望子控件为 UserControl 重新创建它。这听起来像是一个简单的请求,但是如果 UserControl 不在循环中,我可能会要求不可能的事情。在页面生命周期中是否有某个点可以在 UserControl 声明的事件处理程序上重新连接事件,以便在回发时正确调用委托?这似乎是我所缺少的。事件处理程序是在回发时创建的,但由于在 OnClick 期间未在 UserControl 中重新创建而丢失。我不希望 UserControl 必须显式地重新创建事物,而是希望子控件为 UserControl 重新创建它。这听起来像是一个简单的请求,但是如果 UserControl 不在循环中,我可能会要求不可能的事情。在页面生命周期中是否有某个点可以在 UserControl 声明的事件处理程序上重新连接事件,以便在回发时正确调用委托?这似乎是我所缺少的。事件处理程序是在回发时创建的,但由于在 OnClick 期间未在 UserControl 中重新创建而丢失。我不希望 UserControl 必须显式地重新创建事物,而是希望子控件为 UserControl 重新创建它。这听起来像是一个简单的请求,但是如果 UserControl 不在循环中,我可能会要求不可能的事情。但希望子控件为 UserControl 重新创建它。这听起来像是一个简单的请求,但是如果 UserControl 不在循环中,我可能会要求不可能的事情。但希望子控件为 UserControl 重新创建它。这听起来像是一个简单的请求,但是如果 UserControl 不在循环中,我可能会要求不可能的事情。

0 投票
1 回答
611 浏览

python - GTD 应用程序的复合模式

这是我之前的一个问题的延续

这是我的课。

这是我遇到的麻烦。如果我用几个小项目构建一个大项目,我想查看这些项目是什么或当前项目的操作,但是我将所有这些都放在树中。这是我正在使用的测试代码(请注意,我特意选择了几种不同的方式来添加项目和操作以进行测试,以确保不同的方式工作)。

生活中应该有一些项目,其中有一些项目。结构类似于这样(其中缩进是项目,-'s 是动作)

我发现 life.actions() 正在返回树中的每个动作,而它应该不返回任何动作。当我只想“结婚”、“生孩子”和“退休”时,life.projects() 正在返回每个项目,甚至是子项目。我做错了什么?

0 投票
2 回答
1978 浏览

dependency-injection - 如何让 Prism/Unity 自动解析视图(用户控件)?

在复合应用程序(棱镜)中,当我的模块加载时,我收到此错误:

{“当前构建操作(构建键Build Key[CustomersModul.ViewModels.CustomerAllViewModel, null])失败:尝试调用构造函数CustomersModul.ViewModels.CustomerAllViewModel(CustomersModul.Views.CustomerAllView view)时无法解析参数视图。(策略类型 Microsoft.Practices.ObjectBuilder2.BuildPlanStrategy,索引 2)"}

我正在解决这个类:

那个类看起来像这样

通常我会解析没有构造函数参数的Presenter并在内部实例化他们的视图。这是我第一次使用接受 View 作为参数的ViewModel 。

有趣的是,当我使用Resharper转到视图时,它会询问我是否要转到 XAML 或后面的代码,所以也许 Prism 很困惑要实例化哪个?

如何让 Prism 在参数中自动实例化此视图(带有 XAML 和代码隐藏的用户控件)?

0 投票
1 回答
275 浏览

unity-container - Does Prism/Unity have a "service preloader"?

I've got a number of modules in a Prism application which load data that takes 3-8 seconds to get from a service.

I would like to be able to say in my bootstrapper something like this:

PSEUDO-CODE:

And this would run in a background thread and when the user actually needs the variable "allCustomers" it would be fully loaded.

Is there an automatic service in Prism/Unity which does this type of preloading?

0 投票
3 回答
699 浏览

wpf - WPF绑定:从数据库重新加载组合后刷新绑定

我有两个组合的“Make”和“Model”,它们的 SelectedValue 属性绑定到具有 ModelID 和 MakeID 的 Vehicle 对象。

继承人模型...

用户可以在单独的控件中搜索 Vehicles,这会换出底层的 Vehicle 对象。如果您在相同 Make 的车辆之间切换一切正常,但是如果 Make 更改,我会转到数据库并重新加载 ModelSpec 集合。组合不会显示模型描述,因为需要刷新绑定。

我目前的解决方法是在重新加载模型的方法的末尾添加它 - 它工作正常,但不是一个特别优雅的解决方案。

基本上我只是触发 INotifyPropertyChanged ...

我能想到几个类似的不优雅的解决方案——但一定有更好的方法吗?!任何帮助表示赞赏!

0 投票
2 回答
1692 浏览

c# - WPF 数据绑定到复合类模式?

我第一次尝试 WPF,我正在努力解决如何将控件绑定到使用其他对象的组合构建的类。例如,如果我有由两个单独的类组成的 Comp 类(为清楚起见,请注意省略了各种元素):

现在我知道我可以使用 Comp 中定义的“get”轻松绑定 _int1。但是我如何绑定到元素_part1._first、_part1._second。我是否在类 Comp 级别为他们公开了“吸气剂”?或者我可以在复合类中公开它们并使用指向它们的绑定路径?以及如何设置属性?

这就是模式吗?

或者这就是模式?(我不知道该放什么路径)

还是我正在重新发明 MV-VM(我正在慢慢开始理解)?

那么我该怎么做呢?如果它是第一个或第三个模式,那么我似乎已经获取了我所有可爱的(不同的)层次结构数据并将其分解为一个平面配置,以便我可以将它绑定到 UI 元素。这是它必须发生的方式,还是有更好的方法(第二种模式??)

编辑

我忽略了我真的想要两种方式绑定的问题。所以属性访问器真的应该有get和set。

编辑

更新了我的伪代码以显示 setter 和 getter

编辑

我遵循 Mark 和 Julien 提供的模式并实现了 setter,并对结果感到满意。出于某种原因,我说服自己,属性的设置不会一直跟随到最终实体。

0 投票
1 回答
1127 浏览

fluent-nhibernate - Fluent NHibernate 中的地图组合

有2类:产品和图像。

  1. 该产品只有一张图片。
  2. 不能存在孤立图像。

这表示UML 中的组合关系,这意味着:
将 Product.Image 分配给 newImage 会导致以下结果

  1. 删除旧图像;
  2. 插入新图像;
  3. 将新图像链接到产品。

现在我需要将它映射到 RDBMS 表(元代码):

问题是如何使用 Fluent NHibernate 来做到这一点。
请注意:

不适用 - 它不会删除孤立图像。

此外,NH 不支持多对一、一对一的全删除孤儿。

我可能需要像加入组件这样的东西......
但在 FLUENT NH 中。

更新: FNH 用户组中的 James 建议使用以下语法:

但运气不好:NotSupportedException: Obsolete
它应该在 FNH 的 v1 (upcomming) 中工作。

0 投票
2 回答
183 浏览

c# - 在 CAB 中是一个服务它自己的模块吗?

我正在学习复合应用程序块,并且我对服务很感兴趣。我的 shell 应用程序在它自己的解决方案中,当然还有一个测试模块在它自己的解决方案中(开发和测试完全独立于 shell 解决方案之外)。如果我创建了一个名为“Sql Service”的服务,我是否需要将它放在它自己的库中,以便 shell 和模块都知道类型?

如果是这种情况,那么为了良好的实践,我应该将服务项目放在 shell 解决方案中,还是像模块一样放在外部(在它自己的解决方案中),即使它没有作为模块加载?

那么,参考文献呢?shell是否应该直接引用它,添加然后添加服务?还是将其作为模块加载并添加服务?

我应该在哪里创建我的服务?我应该引用还是作为模块加载?

0 投票
1 回答
456 浏览

c# - 将 MVP 用于复合结构化对象模型

(编辑了很多)我有一些带有摘要成员的课程。抽象成员的具体类型将在类实例化时根据用户的输入来确定。但是,第二个成员的具体类型可能取决于第一个成员。

我正在尝试做一些事情来牢记 MVP 设计模式。我教过如何让 Presenter 将委托传递给模型的 Ctor,他(Ctor)将使用它来请求类实例化所需的信息。我不确定这是否是个好主意。这是我写的:

那有意义吗?我想做的事情有名字吗?(在“奇怪的事情”旁边)你知道我应该阅读的设计模式吗?我教过如何将 Builder 设计模式与 MVP 混合,但我不确定我会如何做到这一点。

谢谢

0 投票
4 回答
1273 浏览

mvvm - 在 Prism (CAL) 中,如何使用 RegisterPresenterWithRegion 而不是 RegisterViewWithRegion

我在 Prism 应用程序中有一个模块,在它的初始化方法中我想注册一个演示者而不是一个带有区域的视图,即我想这样做:

伪代码:

而不是像这样加载视图:

演示者当然会带来自己的视图并最终在该区域中注册该视图,但它允许我将演示者绑定到演示者的构造函数中的视图,而不是在 XAML 中将两者绑定在一起(这更像是一种解耦我想在这里避免的 MVVM 模式)。

如何将演示者添加到区域而不是视图?