2016-12-01 47 views
0

我有一个客户谁是一个网站的成员。他每次都必须填写一份表格,而这个表格的确经常出现。这就是为什么他要我为他开发一个应用程序来自动完成这个过程。当我使用webBrowser控件来操作它时,我可以登录,但是之后有一些包含数据绑定的字段。这些字段是我需要操作的字段。当我将数据推送到必要的字段时,它不起作用,因为在html标记中,没有值属性,而是具有数据绑定。所以我的问题是如何操纵和推送数据到这些领域?如何操作数据绑定,knockoutJs

非常感谢您提前提供的所有帮助。

+0

你阅读文件? http://knockoutjs.com/documentation/attr-binding.html – PMerlet

+0

是的,我已经检查过它并获得了数据绑定的逻辑。它像angularJs ng模型,但我不明白的东西是操纵它。如果你有任何想法,我将不胜感激,如果你可以与我分享:) –

+0

是否有任何方法添加到HTML DOM自定义脚本?通过web浏览器控制。如果有可能,也许可以将脚本推入html以便能够操纵? –

回答

0

Knockout使用数据绑定来侦听输入中的更改并更新基础模型。例如,value绑定侦听change事件并将新值写入数据绑定observable

如果通过代码更新value属性,则不会触发change事件。你会在看到 UI中的新值,但是javascript模型不会被更新。

您可以通过明确触发更改来解决此问题。这里有一个例子:

  • 键入input:你会看到一个console.log显示淘汰赛得到更新
  • 按下按钮,注入新的价值:你不会看到日志:淘汰赛不更新
  • 按最后一个按钮触发change事件。你会注意到现在更新模型。

当然,您可以将两个点击侦听器组合成一个函数。我已经把他们分开了,以获得点。

// Hidden knockout code: 
 
(function() { 
 
    var label = ko.observable("test"); 
 
    label.subscribe(console.log.bind(console)); 
 

 
    ko.applyBindings({ label: label }); 
 
}()); 
 

 
// Your code 
 
var buttons = document.querySelectorAll("button"); 
 
var input = document.querySelector("input"); 
 

 
buttons[0].addEventListener("click", function() { 
 
    input.value = "generated value"; 
 
}); 
 

 
buttons[1].addEventListener("click", function() { 
 
    // http://stackoverflow.com/a/2856602/3297291 
 
    var evt = document.createEvent("HTMLEvents"); 
 
    evt.initEvent("change", false, true); 
 
    input.dispatchEvent(evt); 
 
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script> 
 
<input type="text" data-bind="value: label"> 
 

 
<button>inject value from outside</button> 
 
<button>let knockout know something changed</button>

+0

感谢分享的人,不知何故,我无法得到适当的时间来检查它,但尽快我会尝试这个,然后让你知道。再次感谢。 –