执行绑定时的WinJS通知

时间:2013-08-20 14:50:48

标签: javascript mvvm binding windows-8 winjs

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

有没有办法知道进行绑定的确切时刻?为什么“onchange”事件没有被解雇?我想对视图后面的代码中viewModel所做的视图的更改作出反应。

2 个答案:

答案 0 :(得分:2)

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

  1. WinJS不支持双向绑定。仅支持从viewmodel绑定到视图。其他方式 - 不支持查看模型的视图。你需要在input元素上显式地监听'change'事件 - 然后处理它。
  2. 如果您在可观察属性发生变化时寻找事件,可以考虑使用bind method

    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. 要收听输入元素的更改,您可以收听“更改”事件。

    inputElement.addEventListener('change', function(evt)
    {
        // your code here.
    }); 
    

答案 1 :(得分:0)

您不能使用“更改”事件,因为只有在输入失去焦点并且值发生更改时才会触发它。您不能使用“输入”事件,因为它会在“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非常重要,否则事件将在循环中触发。