我得到一个JSON元素,并从它的项目,像这样构build一个列表: getTitles: function(data) { data = data || {}; var list = []; $.getJSON( '/titles', data, function(data) { $.each(data.data, function(key, val) { list.push( '<li><a href="'+ val.href +'">'+ val.title +'</a><span class="count">'+ val.count +'</span></li>' ) }); $('#title-items').html(list.join('')); } ); } 而我绑定点击事件a像这样a元素: $('a').on('click', function(e) { alert('clicked'); e.preventDefault(); }); 旧的元素显示警报,但新的跟随URL。 事件处理程序不适用于新的。 我该如何解决这个问题?
事件处理程序和callback函数有什么区别?
我使用了一些UserControls ,它们在运行时在应用程序中创build和销毁(通过创build和closures内部具有这些控件的子窗口)。 这是一个WPF用户控件,并从System.Windows.Controls.UserControlinheritance。 没有可以覆盖的Dispose()方法。 PPMM是与我的应用程序相同的生命周期的Singleton 。 现在在我的(WPF) UserControl的构造函数中,我添加一个事件处理程序: public MyControl() { InitializeComponent(); // hook up to an event PPMM.FactorChanged += new ppmmEventHandler(PPMM_FactorChanged); } 我习惯于在析构函数中删除这样的事件处理程序: ~MyControl() { // hook off of the event PPMM.FactorChanged -= new ppmmEventHandler(PPMM_FactorChanged); } 今天我偶然发现,并想知道: 1)这是必要的吗? 还是GC照顾它? 2)这是否工作? 或者我将不得不存储新创build的ppmmEventHandler ? 我期待着你的回答。
我们都熟悉C#事件声明的恐怖。 为了确保线程安全, 标准是写这样的东西 : public event EventHandler SomethingHappened; protected virtual void OnSomethingHappened(EventArgs e) { var handler = SomethingHappened; if (handler != null) handler(this, e); } 最近在这个板上的其他问题上(现在我找不到),有人指出扩展方法在这种情况下可以很好地使用。 以下是一种方法: static public class EventExtensions { static public void RaiseEvent(this EventHandler @event, object sender, EventArgs e) { var handler = @event; if (handler != null) handler(sender, e); } static […]
编写内联事件处理程序是不好的做法? 对于我来说,我更喜欢在事件处理程序中使用本地variables时使用它,如下所示: 我更喜欢这个: // This is just a sample private void Foo() { Timer timer = new Timer() { Interval = 1000 }; int counter = 0; // counter has just this mission timer.Tick += (s, e) => myTextBox.Text = (counter++).ToString(); timer.Start(); } 而不是这个: int counter = 0; // No need for this out of […]
任何人都可以告诉我的KeyDown事件, KeyPress事件和KeyUp事件之间的区别? 我检查了msdn网站,并没有解释太多。 任何人都可以用简单的逻辑来告诉我什么时候发生的每一件事情? 我觉得所有上述事件发生在按下某个键时。 那么它们之间的确切区别是什么?
我有一个EditText字段,上面有一个Customer Text Watcher。 在一段代码中,我需要改变EditText中的值,我使用.setText("whatever") 。 问题是一旦我做了这个改变afterTextChanged方法得到调用创build了一个无限循环。 如何在不触发afterTextChanged的情况下更改文本? 我需要在afterTextChanged方法中的文本,所以不build议删除TextWatcher 。
如果我有一个只有less数事件处理程序注册的应用程序(并且在应用程序closures之前使用这些事件的对象不会被处理),我是否真的需要担心注销那些处理程序? 我能看到的唯一的理由是,如果事件被触发,你不需要关心(即你有多个处理程序注册到一个事件),可能会有一点额外的开销。 还有其他什么好的理由吗? 任何人遇到重大问题,因为他们没有取消注册事件?
我认为你已经听说过消息/事件总线,这是系统中所有事件stream动的唯一地点。 计算机主板和LANnetworking中也有类似的架构。 这对于主板和networking来说是一个很好的方法,因为它可以减less线路数量,但是对软件开发有好处吗? 我们没有电子产品这样的限制。 消息总线/事件总线的最简单实现可以是: class EventBus { void addListener(EventBusListener l}{…} void fireEvent(Event e) {…} } 使用bus.fireEvent(event)完成发布事件,接收消息由bus.addListener(listener)启用。 这种体系结构有时用于软件开发,例如MVP4G为GWT实现类似的消息总线。 活跃项目: Google Guava EventBus 本杰明Diedrichsen 大使 Mathieu Carbou的Mycila PubSub mvp4g事件总线 简单的Java事件总线 hibernate/死亡项目: Sun / Oracle JavaBeans InfoBus https://eventbus.dev.java.net/ [Broken link] 这只是stream行的Observer(Listener)模式“全局” – 系统中的每个对象都可以监听每条消息,我认为这很糟糕,它打破了封装原则(每个对象都知道所有事情)和单一责任原则某些对象需要新types的消息,事件总线通常需要更改,例如在Listener类中添加新的Listener类或新方法。 由于这些原因,我认为,对于大多数软件来说,观察者模式比事件总线更好。 你对事件总线有什么看法,对典型的应用程序有什么意义? 编辑:我不是在谈论'大'企业解决scheme,如ESB – 他们可以是有用的(还有什么比ESB提供更多,不仅仅是一个事件总线)。 我在询问在“常规”Java代码中使用消息总线进行对象到对象连接的有用性 – 有些人这样做,请检查上面的链接。 事件总线可能是电话到电话通信或计算机到计算机通信的最佳解决scheme,因为networking中的每个电话(或计算机)通常可以相互通话,并且总线减less了电线的数量。 但对象很less互相交stream – 一个对象可以拥有多less个合作者 – 3,5个?
在我的应用程序中,我需要处理移动和点击事件。 点击是一个ACTION_DOWN动作,几个ACTION_MOVE动作和一个ACTION_UP动作的序列。 理论上,如果你得到一个ACTION_DOWN事件,然后是一个ACTION_UP事件 – 这意味着用户只是点击你的视图。 但实际上,这个顺序在某些设备上不起作用。 在我的三星Galaxy Gio上,当我点击我的View:ACTION_DOWN,几次ACTION_MOVE,然后ACTION_UP时,我得到这样的序列。 即我用ACTION_MOVE操作代码得到了一些令人意想不到的OnTouchEvent触发器。 我从来没有(或几乎从来没有)序列ACTION_DOWN – > ACTION_UP。 我也不能使用OnClickListener,因为它没有给出点击的位置。 那么如何检测点击事件并将其与移动不同呢?