2016-11-05 90 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>