2014-01-14 54 views
0

我有一些事件代表团输入工作的伟大,与执行一些任务:微分更改事件与更新淘汰赛视图模型

$("#myParentWrapperId").delegate("input,textarea,select", 'change keypress', function (e) { 
//runStuff(); 
}); 

<select data-bind="value:MyVM.MyPropValue"></select> 

下的另一种方法,我在编程更新视图模型的一些相同的输入字段。

self.MyListItems()[idx].MyVM.MyPropValue(data.MyVM.MyPropValue); 

问题是,当我编程方式更新视图模型的选择字段,它似乎也被烧成变化事件,并触发上述事件代表团,我不想要的。

是否有可能之一:

A)还更新视图模型但它不是选择触发onchange事件,但没有打破依赖的观测?

或在事件代理

B)上述嗅出并且当用户导致onchange事件并且当视图模型更新会导致onchange事件区分?

回答

0

a)仍然更新viewmodel,但让它不会触发select的onchange事件,但不会破坏依赖的observables?

从Knockout文档:“如果您尝试设置无法在已填充的下拉列表中显示的模型值,请拒绝该更改,因为您不允许使用不同意的模型值有可见的用户界面选择。“此评论出现在value处理程序触发change事件之前。

因此,有为什么你会从一个纲领性的视图模型更新得到change事件两种可能性:

  1. 你设置的是不会在下拉列表中存在的值。如果是这种情况,您可以在设置之前添加代码以检查该值是否有效。

  2. 虽然下拉列表中项目的值是字符串,但您将该值设置为数字类型。虽然Knockout将选择匹配的项目,但会触发change事件以指示observable需要更新为匹配的字符串值。如果是这种情况,您可以确保在设置observable时将值转换为字符串。

B)在事件代理以上嗅出并且当用户导致onchange事件并且当视图模型更新会导致onchange事件区分?

我无法确定哪些浏览器支持此功能,但该事件可能有isTrusted属性,您可以检查。参考:http://www.w3.org/TR/DOM-Level-3-Events/#h3_trusted-events

+0

干得好,我正在用选择值的int更新viewmodel。用它来解决问题。谢谢!!非常感谢您的帮助。 – user3195170