【问题标题】:How does one restore a form's previous value in Knockout.js? [duplicate]如何在 Knockout.js 中恢复表单的先前值? [复制]
【发布时间】:2013-07-19 04:39:32
【问题描述】:

我有一个页面上预先填充了输入,我希望能够使用该初始值作为 Knockout 的初始值。

例子:

 <input 
      name="Address1" 
      type="text" 
      id="Address1" 
      class="input--textbox" 
      value="213 Fourth st." 
      data-bind="value:Address1" />

似乎最明显的解决方案是:

this.Address1 = ko.observable(document.getElementById("Address1").value) 

但这感觉就像一开始就违背了使用诸如 Knockout 之类的东西的目的。

有没有一种方法可以将参数传递给 Knockout,或者使用一些扩展来将值默认为表单提供的值?

【问题讨论】:

标签: knockout.js


【解决方案1】:

您必须记住,knockout.js 是一个双向绑定框架。这显然意味着进入 dom 元素的内容会反映在模型中。此外,反之亦然,进入模型的内容反映在 dom 元素中。

因此,您只需确保将数据加载到模型中,UI 就会反映您尝试设置的所有预填充数据。

这是我的典型做法:

function MyModel(data) {
    var self = this;
    //declare properties here


    self.load = function(data) {
        if (data) {
            //set properties here
        }
    };
    //ensure when the model is first instantiated, it will attempt to load 
    //whatever data was passed in if it's not null or undefined
    self.load(data);     
}

编辑:

现在,除了在需要时显式调用load() 来推迟数据加载之外,您现在还可以灵活地将数据干净地传递给模型的构造函数。

【讨论】:

  • 我如何将数据放入模型中,而不需要繁琐的getElementById's?数据已经存在在 DOM 中,直接将其带入 JavaScript 似乎是无偿的。
  • 当您设计一个淘汰页面时,数据永远不会加载到 html 本身中。这就是模型的重点,将数据与表示分离。您需要从 html 中重构数据并通过其他方式将其加载到模型中,例如将数据序列化为 json。您使用的是什么服务器端语言?
  • C#。这些元素是在 IsValid 失败后预填充的 ASP 控件。他们已经分配了价值,并且将数据存储在其他地方(例如页面上另一个脚本标签中的 JSON 格式)将涉及更多的工程,因为这些东西应该相对便宜。
  • @cwallenpoole 不幸的是,没有什么可做的,只能通过采用序列化数据并用它填充模型的方法来重新设计页面以完全利用淘汰赛。否则,这真的无关紧要,因为您的 ASP 控件上的 ViewState 将永远不会与淘汰模型保持同步,您将面临一场噩梦。这是一个全有或全无的提议。
  • 我只是使用stackoverflow.com/q/11596933/866172建议的系统。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-26
  • 1970-01-01
  • 1970-01-01
  • 2016-04-11
  • 1970-01-01
  • 1970-01-01
  • 2017-02-12
相关资源
最近更新 更多