2016-11-05 91 views
0

我正在嘗試更新以前未使用Knockout的應用程序。很少有輸入字段在我們更改選擇選項時從服務器/數據庫獲取數據。現在,我正在嘗試使用Knockout基於填充的輸入字段生成報告。但是,當這些輸入字段從數據庫獲取數據時,它不會在UI上進行更新。 例如,敲除輸入綁定

<input type = "text" id = "ip1" data-bind = "value:ip1"></input>

從數據庫中獲取數據。

在報告中,我試圖更新從數據庫收到的值。

<tr><td>Left Margin:</td><td><strong data-bind="text:ip1"></strong></td></tr>

視圖模型:

function ViewModel() { 
 
\t \t self = this; 
 
\t \t self.ip1 = ko.observable(); 
 
}; 
 
var vm = new ViewModel(); 
 
ko.applyBindings(vm);

用於從數據庫檢索數據的功能被寫入單獨使用JavaScript,Ajax的,PHP,XMLHTTP。

現在,當我改變選擇選項時,輸入字段正在更新,但在報告上,數據未被更新。

+0

你是如何從服務器處理新的數據?您需要使用vm.ip1(newValue)來設置'ip1',以保證所有工作都可以繼續。您應該**不**嘗試通過代碼通過DOM更新值。 – user3297291

回答

0

所以它聽起來像淘汰賽並不知道你的元素已經改變。你可以在你的輸入從你的未綁定事件改變後強制通過jquery進行更改。

jQuery('#myinput').change(); 

這裏是一個小提琴我確實在那裏我有一個綁定按鈕,點擊改變綁定的輸入框的值。 https://jsfiddle.net/othkss9s/30/

這裏是JavaScript

function model() { 
    var self = this; 
    this.test = ko.observable("test"); 
}; 

var myViewModel = new model(); 

$(document).ready(function() { 
    ko.applyBindings(myViewModel); 
    $('#mybutton').click(function(event) { 
    $('#myinput').val('changed from jquery'); 
    jQuery('#myinput').change(); 
    }); 

}); 

下面是HTML

<p> 
    <input data-bind="textInput: test" id="myinput"> the value is: 
    <label data-bind="text: test"></label> 
</p> 

<p> 
    <button id="mybutton"> 
    change the value using jquery 
    </button> 
</p>