2016-12-01 48 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

感謝分享的人,不知何故,我無法得到適當的時間來檢查它,但儘快我會嘗試這個,然後讓你知道。再次感謝。 –