微软通过.NET Framework 4向BCL引入了IObservable<T>
接口,我想:“太好了,最后,我必须使用它!” 因此,我深入研究并阅读了帖子和文档,甚至实现了该模式。
这样做之后,我意识到基本实现实际上将所有T
事件发送给所有订阅者,而没有对其进行任何过滤。 即纯广播。 我在某处读到Observable模式是用于普通广播的。 我觉得这是不正确的,我缺少了一些东西。
我的问题:
如果添加过滤机制,则使用Observable模式与仅使用普通CLR事件有什么区别?
什么时候应该使用这种模式,什么时候应该选择使用普通的CLR事件?
可观察模式的主要优点是什么?
因此,我的问题是前几天通过iPhone配置实用程序查看一些iOS 7.0.x设备的控制台输出。 我很困惑地看到WiFi守护进程无缘无故地(没有后台应用程序活动/未推送消息等)将WiFi守护进程注册为蓝色的迹象。 这些都作为耦合记录在控制台中以以下形式出现:
Mar xx xx:xx:xx iDevice wifid[xx] <Notice>: WiFi:[406330748.823677]:
Mar xx xx:xx:xx iDevice wifid[xx] <Notice>: Too frequent(1.822344 secs) rssi event from driver
Mar xx xx:xx:xx iDevice wifid[xx] <Notice>: WiFi:[406330748.895756]:
Mar xx xx:xx:xx iDevice wifid[xx] <Notice>: Too frequent(0.835468 secs) rssi event from driver, ignoring
...等等。 让我担心的是,以上各行大约每秒钟重复一次,而且似乎永无止境。
现在,我不是任何形式的程序员,但了解UNIX的一些基础知识以及所有知识后,我就得出结论,WiFi守护程序占用了大量CPU时间,如使用终端的顶部故障所示,这反过来又 可能表明这可能是(也可能不是)我最近在其中一些设备上电池寿命仍然很差的原因。
接下来,我显然会问你们所有人,是否有人熟悉上述行为,如果是,那么“噪声”的根源是什么。
我动态创建了一个新的event.target.hasClass()
(带有“文本框”类和ID)以及其中的一些其他元素,随后在我的代码中将event.target.hasClass()
绑定到click事件,并显示被单击的元素,如下所示:
$('#textbox_'+i).bind('click', function(event){
alert(event.target.className);
}
很好,它将给我event.target.hasClass()
作为显示的类之一。但是event.target.hasClass()
似乎不起作用。 因此,当我执行以下操作时,没有任何反应:
$('#textbox_'+i).bind('click', function(event){
if(event.target.hasClass('textbox')) { alert('got it!'); }
}
我尝试了几种不同的方法,但对我来说似乎event.target.hasClass()
无效。 还有其他处理事件的方法,还是我做错了什么?
我想确保仅在特定类中为实例上的事件订阅一次。
例如,我希望能够执行以下操作:
if (*not already subscribed*)
{
member.Event += new MemeberClass.Delegate(handler);
}
我将如何实施这样的警卫?
我需要设置一个简单的事件侦听器,以不时刷新Handler
。 问题是我不知道如何生成事件。
我知道,对于诸如按键或按钮按下之类的事件,我只需要实现Handler
。但是在这种特定情况下,我实际上需要生成事件,每次我的应用程序的另一个运行线程唤醒并刷新其列表时,都会触发该事件。 RSS Feed中的新闻。
我已经做了所有事情,但是被困在这里。 我可以得到任何建议或链接,以获得有关如何实现此目的的更多信息吗?
谁能给我一个创建事件和处理程序的自定义集的示例。假设您有一个Person对象,您希望小部件知道它是否已更新。
您创建了HandlerManager,现在必须创建一个Event和一个Handler。您将如何定义这些类,以便可以订阅和引发事件?
大多数事件都是基于DOM的,而我想创建一些自定义事件和处理程序,这些事件和处理程序可以在任何基于浏览器的事件之外触发。
我有一个应用程序,当选中某个单选按钮时显示一个div,然后在未选中单选按钮时隐藏该div。 问题在于,仅在选中单选按钮时才调用附加到单选按钮的change事件,而不是在选中另一个(取消选中前一个)时才调用它。 我当前的代码如下:
<form name="newreport" action="#buildurl('report.filters')#" method="post">
<dl class="oneColumn">
<dt class="first"><label for="txt_name">Name</label></dt>
<dd><input type="text" name="name" id="txt_name" class="text" /></dd>
<dt><strong>Type</strong></dt>
<dt><input type="radio" name="type" id="rdo_list" value="list" checked="checked" /><label for="rdo_type" style="display:inline;">List</label></dt>
<dd>List a group of records</dd>
<dt><input type="radio" name="type" id="rdo_fields" value="fields" /><label for="rdo_fields" style="display:inline;">Field Breakdown</label></dt>
<dd>Breaks down distinct field values for comparison</dd>
<dt><input type="radio" name="type" id="rdo_history" value="history" /><label for="rdo_history" style="display:inline;">Historical Comparison</label></dt>
<dd>Provides record changes over a group of years for growth comparisons</dd>
<dt><input type="radio" name="type" id="rdo_breakdown" value="breakdown" /><label for="rdo_breakdown" style="display:inline;">Student Breakdown</label></dt>
<dd>Breaks down students by school, district or grade</dd>
<div class="reportyear">
<dt><label for="txt_year">Year to Report</label></dt>
<dd><input type="text" name="year" id="txt_year" class="text" value="#year(Rc.yearstart)#" /></dd>
</div>
<div class="date-spans" style="display:none;">
<dt><label for="txt_yearstart">Year Start</label></dt>
<dd><input type="text" name="yearstart" id="txt_yearstart" class="text" value="#evaluate(year(Rc.yearstart)-5)#" /></dd>
<dt><label for="txt_yearend">Year End</label></dt>
<dd><input type="text" name="yearend" id="txt_yearend" class="text" value="#year(Rc.yearstart)#" /></dd>
</div>
</dl>
</form>
<script type="text/javascript">
$(function(){
$('##rdo_history').change(function(e){
var isChecked = $(this).attr(checked);
var $datespan = $('form .date-spans');
var $year = $('form .reportyear');
if(isChecked){
$year.css({display:'none'});
$datespan.fadeIn('fast');
}else{
$datespan.css({display:'none'});
$year.fadeIn('fast');
}
});
});
</script>
它看起来像一个非常简单的脚本,但是该事件仅在check事件上被调用,而不在uncheck事件上被调用。 谁能告诉我为什么?
我有以下代码:
$('#my-button').on('click change', function(event) {
alert("Who fired me, click or change?");
});
我怎么知道被称为“点击”或“更改”的事件?
有没有一种方法可以忽略可观察值的订户。 我想更改一个observable的值,但不希望使用kickout.js对订户执行该值
如果要满足特定条件,我想防止更改选择框。 这样做似乎无效:
$('#my_select').bind('change', function(ev) {
if(my_condition)
{
ev.preventDefault();
return false;
}
});
我猜这是因为到此为止所选的选项已经更改。
还有什么其他方式可以做到这一点?
我尝试了$.unbind('hover')
,该方法不起作用。
我正在寻找可与Cocoa的NSEvent
类一起使用的可用键代码的完整列表。 NSEvent
类具有keyCode
属性,该属性定义为unsigned short
。将以下代码放置在适当的UI对象中时,将在按下键时回显键代码:
- (void)keyDown:(NSEvent *)theEvent
{
NSLog(@"%d", [theEvent keyCode]);
}
从此代码中,我可以轻松地看到哪些代码与某些键匹配,但是我想在某个地方找到列出所有这些代码的正式文档。 我希望苹果公司的头文件看起来像这样:
enum {
...
NSKeyCodeLeftArrow = 123,
NSKeyCodeRightArrow = 124,
...
};
但是,如果有,我还没有找到。
假设我想为自己的班级创建自己的事件监听器,该怎么做? 我需要手动维护线程吗?
我有一个叫onClick
的React组件,它有许多子<SensorItem />
s(另一个React组件)。 我希望能够在<SensorList />
内的每个<SensorItem />
上声明onClick
事件。我尝试执行以下操作:
sensorSelected: function(sensor) {
console.log('Clicked!');
},
render: function() {
var nodes = this.state.sensors.map(function(sensor) {
return (
<SensorItem onClick={ this.sensorSelected } />
);
}.bind(this));
return (
<div className="sensor-list">
{ nodes }
</div>
);
}
不用说,我没有得到任何“点击!” 出现在我的控制台中。 Chrome中的React检查器指示已注册onClick
事件,并应使用上面的功能主体。
因此,我得出结论,我无法在实际的<SensorItem />
标签上注册onClick
事件(但是,我不确定为什么会这样)。 我如何才能实现这一目标呢?
我发现自己经常做这种事情:
EventHandler eh = null; //can't assign lambda directly since it uses eh
eh = (s, args) =>
{
//small snippet of code here
((SomeType)s).SomeEvent -= eh;
}
variableOfSomeType.SomeEvent += eh;
基本上,我只想附加一个事件处理程序以侦听该事件的一个镜头,之后我就不再希望保持连接状态了。 通常,“代码快照”只是一行。
我的脑袋有些麻木了,我确定必须做点什么,所以我不需要重复所有这些开销。 请记住,EventHandler
可能是EventHandler<T>
。
有什么想法可以整理代码的重复部分并将代码段留在Lambda中吗?
这个问题已经在这里有了答案:
关于事件,我有3个问题:
我有例如以下代码:
Ctor:目的:用于数据库属性更新
this.PropertyChanged += (o, e) =>
{
switch (e.PropertyName)
{
case "FirstName": break;
case "LastName": break;
}
};
这样做的目的:对于GUI绑定,将模型包装到viewmodels中
ObservableCollection<Period> periods = _lpRepo.GetDailyLessonPlanner(data.DailyDate);
PeriodListViewModel = new ObservableCollection<PeriodViewModel>();
foreach (Period period in periods)
{
PeriodViewModel periodViewModel = new PeriodViewModel(period,_lpRepo);
foreach (DocumentListViewModel documentListViewModel in periodViewModel.DocumentViewModelList)
{
documentListViewModel.DeleteDocumentDelegate += new Action<List<Document>>(OnDeleteDocument);
documentListViewModel.AddDocumentDelegate += new Action(OnAddDocument);
documentListViewModel.OpenDocumentDelegate += new Action<int, string>(OnOpenDocument);
}
PeriodListViewModel.Add(periodViewModel);
}
我的程序在其面板上绘制文本,但是如果要删除文本,则必须重新绘制。
我该如何手工召集(举起)油漆比赛?
两个关键事件自变量类KeyEventArgs
和PreviewKeyDownEventArgs
具有两个属性297300452033219891989和KeyData
,它们都是枚举类型的Keys。
这两个属性有什么区别? 它们中的值是否曾经彼此不同? 如果是这样,什么时候以及为什么?
我有一个带有嵌入式iframe的父文档。 在iframe中,我有一个上传字段。 用户选择要上传的文件后,我将触发一个jQuery change事件。 在该事件中,我想将父窗口中的变量设置为true,以便父窗口知道上载已经开始。
有谁知道如何做到这一点?
正在尝试此操作,但没有成功:
var test;
$("#newsletter_email").change(function() {
parent.window.test = true;
});
$('#send').click(function() {
if (test) {
alert('File has been uploaded!');
} else {
alert('You need to upload a file');
}
});
有没有办法采用IE 7或8来获取事件的当前目标?
通过其他浏览器(Firefox,Opera,Chrome等),我们可以使用currentTarget
或我们也可以使用this
关键字来引用处理事件的对象。
但是在Internet Explorer中,我们没有currentTarget
属性,而this
则指向窗口对象!
那我该怎么办呢?