我是KnockOutJs的新手,并开发了一个使用KnockOutJs来维护客户端模型状态和Asp.Net Webforms的页面。 当我从服务器请求页面时,控件(如文本框,跨度)已经被后面的Asp.Net代码填充。
<asp:TextBox runat="server" class="form-control" text="John" data-bind="value: firstName" id="txtFirstName"></asp:TextBox>
现在在我的javascript中定义我的viewmodel
var viewModel = { userId = ko.observable() }
ko.applyBindings(viewModel);
applyBindings语句导致文本框的值被重置,因为我没有在ko.observable()中定义我的初始值。
applyBindings是否存在重载,不会将模型应用于DOM元素,只是将模型与DOM绑定或反向(即从DOM读取值到模型中)
答案 0 :(得分:2)
最好使用服务器端代码填充您的viewmodel,而不是使用服务器端代码来填充文本框。
var viewModel = { firstName = ko.observable('<%= HttpUtility.JavaScriptStringEncode(FirstName) %>') };
ko.applyBindings(viewModel);
或者理想情况下,您将在服务器端创建一个模型,并使用json.net将其序列化为json:
function ViewModel(model) {
var self = this;
self.firstName = ko.observable(model.FirstName);
};
var model = <%= JsonConvert.SerializeObject(Model) %>;
var viewModel = new ViewModel(model);
ko.applyBindings(viewModel);