【问题标题】:KnockoutJs applyBindings clearing default values set by Asp.net WebformsKnockoutJs applyBindings 清除 Asp.net Webforms 设置的默认值
【发布时间】:2014-12-04 08:51:46
【问题描述】:

我是 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 中

var viewModel = { userId = ko.observable() }
ko.applyBindings(viewModel);

applyBindings 语句导致文本框的值被重置,因为我没有在 ko.observable() 中定义我的初始值。

applyBindings 是否存在重载,它不会将模型应用到 DOM 元素,而只是将模型与 DOM 绑定或执行相反的操作(即从 DOM 读取值到模型中)

【问题讨论】:

  • 我现在做不到,但我怀疑自定义绑定可能是这里的方法。因此,与其使用内置的 value 绑定,不如编写自己的绑定,做同样的事情,但能够从 DOM 中获取它的初始值。如果到那时没有其他人的话,我明天会试一试。
  • 或者,无论您的代码在哪里设置后面代码中文本框的值,您可以更改它以便将值注入到您的 JavaScript 视图模型中吗?
  • @JamesThorpe,感谢您的指导,我会在周末尝试这个。

标签: knockout.js webforms


【解决方案1】:

最好使用服务器端代码来填充您的视图模型,而不是使用服务器端代码来填充您的文本框。

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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-07
    • 2013-06-26
    • 1970-01-01
    • 1970-01-01
    • 2010-12-27
    • 2011-10-05
    • 1970-01-01
    • 2022-12-17
    相关资源
    最近更新 更多