我的模特 -
public class Model2
{
public String Text1;
public String Text2;
}
行动方法 -
public ActionResult Index()
{
Model2 model = new Model2();
model.Text1 = "a";
return View("Index2", model);
}
html -
<input id="text1" type="text" data-bind='value: Text1, keyup: OnText1Change'>
<input id="text2" type="text" data-bind='value: Text2'>
<button onclick="PostIndex2Data()">Post Data</button>
<script type="text/javascript">
var data = @Html.Raw(new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(Model));
BindIndex2Data();
</script>
javascript -
function BindIndex2Data() {
viewModelData = ko.mapping.fromJS(data);
viewModelData.OnText1Change = function () {
var value = viewModelData.Text1;
value = value + 1;//or perform some claculation here
viewModelData.Text2 = ko.observable(value);
}
ko.applyBindings(viewModelData);
}
我在这里尝试的是从text1
获取值,对该值执行一些计算并将该值分配给text2
。
这是在淘汰赛中实施"ontextchange"
事件的正确方法吗?
出于某种原因,我的OnText1Change
事件未在此处调用。请帮忙!
答案 0 :(得分:0)
Knockout是一个双向绑定框架。您不处理更改数据的事件,您只需设置您的viewmodel和绑定并信任它为您完成工作。首先,您需要删除keyup: OnText1Change
并删除函数viewModelData.OnText1Change
。
要更改observable的值,在首次使用viewModelData.Text2 = ko.observable('')创建它之后,可以将其称为函数:
viewModelData.Text2(value);
如果您希望text2的值取决于文本1的值,则可以这样定义:
viewModelData.Text2 = ko.computed(function(vm) {
return vm.Text1() + "something";
}, viewModelData);
如果要绑定text2,并且还能够以编程方式更新它:
viewModelData.Text1.subscribe(function(value) {
viewModelData.Text2(value + "something");
});