2012-02-13 91 views
2

我想了解Knockout对页面上的元素进行更新时由于applyBinding所做的更改。当我运行页面T110出现在我的输入框,并如我所料,当我改变值显示在控制台消息Knockout - 当边界值发生变化时什么会触发元素?

<!DOCTYPE html> 
<html> 
<head> 

    <title>Example</title> 
     <script src="../lib/jquery-1.7.1.min.js"></script> 
    <script src="../lib/knockout-2.0.0.js"></script> 

    <script> 
     $(function() { 
      $("#itemNumber").change(function() { 
       console.log('itemNumber'); 
      }); 

      //create The view Model 
      var product1 = { 
        id: 1002, 
        itemNumber: "T110", 
        model: "Taylor 110", 
        salePrice: 699.75 
       }; 
      ko.applyBindings(product1); 
     }); 
    </script> 
</head> 
<body > 
    <input data-bind="value: itemNumber" type="text" id="itemNumber" /> 
</body> 
</html> 

考虑这个简单的例子。

但是请注意,当applyBindings因为我希望在页面加载过程中,将其称为不火......

所以它使用什么机制来修改输入要素的价值呢?而我真正想要的是一些方法来检测元素本身,因为这是一个控制,我想复制一个隐藏的领域的实际价值的正确的地方,但保持任何价值坚持下去...

感谢

回答

3

你可以自己去看,看完source值绑定

处理更改的默认事件是更改事件,但是这是configurable

此外,学习KnockoutJs的好方法是通过tutorials

+0

感谢,但它不是做什么,我仍然期待。为什么更改不会随后触发:ko.applyBindings(product1);叫做?然而不知怎么的价值被显示了......那个特殊的代码似乎没有被调用。 – Tim 2012-02-14 21:30:54

+0

我实际上已经通过了教程。但我有这种具体情况的情况下...我想我找到了一个更好的方式来做到这一点,但这确实意味着我的控制需要取决于淘汰赛,这可能不总是这种情况.. – Tim 2012-02-15 20:50:35

1

如果您不使用更改事件,它可以工作吗?

尝试手动订阅看到效果,而不是:

product1.itemNumber.subscribe(function (newValue) { 
    console.log(newValue); 
}); 
+0

谢谢,但问题我我感兴趣的是如何检测到ko正在改变对象的价值。所以当ko.applyBindings被调用时,我的值得到更新。如果改变不起作用,它是如何做到的。 – Tim 2012-02-14 21:34:36

+0

您是否看到两个处理程序都已连接(console.log($(“#itemNumber”).data(“events”).change.length));)?如果没有,可能将你的代码包装在一个$(document).ready()块(我正在抓)中,因为你的脚本出现在主体之前。 – Tuan 2012-02-16 22:11:40

相关问题