3

在我的 Windows 8 WinJS 应用程序中,我有一个用 viewModel 填充的视图。ViewModel 包含绑定到我的 HTML 视图中的文本输入的可观察属性(通过 WinJS.Binding.as)。当我从 viewModel 更改此属性的值时,文本输入的值会更改,但是不会触发此文本输入的“onchange”事件。

有没有办法知道执行绑定的确切时间?为什么没有触发“onchange”事件?我想对视图背后代码中视图模型所做的更改做出反应。

4

2 回答 2

2

问题看起来不是很清楚。其中一些细节可能会对您有所帮助。

  1. WinJS 不支持双向绑定。仅支持从视图模型到视图的绑定。不支持其他方式 - 查看到查看模型 - 不支持。您将需要在输入元素上明确收听“更改”事件 - 并处理它。
  2. 如果您正在寻找可观察属性更改时的事件,您可以考虑使用bind 方法

    var p = { name: 'martin' };
    var o = WinJS.Binding.as(p);
    o.bind('name', function onnamechange(newValue, oldValue)
    {
        console.log('property changed: ', oldValue, newValue);
    });
    o.name = 'mark';  
    
  3. 要监听输入元素的变化,您可以监听 'change' 事件。

    inputElement.addEventListener('change', function(evt)
    {
        // your code here.
    }); 
    
于 2013-08-21T12:04:58.363 回答
0

您不能使用“更改”事件,因为它仅在输入失去焦点并且值更改时才会触发。您不能使用“input”事件,因为它会在“keydown”上触发。检查这两个事件的文档:

更改:http: //msdn.microsoft.com/en-us/library/windows/apps/hh441307.aspx

输入:http: //msdn.microsoft.com/en-us/library/windows/apps/jj569354.aspx

您可以使用的是“onpropertychange”事件。我试过了,由于某种原因它不适用于 addEventListener(),但它适用于 attachEvent()。

inpt.attachEvent("onpropertychange", function (e) {
    if (e.propertyName == "value") {
        inpt.style.background = "red";
    }
})

检查 propertyName 很重要,否则事件将在循环中触发。

于 2013-08-21T09:18:05.650 回答