Knockout JS 如何将数据绑定到静态表单元素

Posted

技术标签:

【中文标题】Knockout JS 如何将数据绑定到静态表单元素【英文标题】:Knockout JS How to Data-Bind to Static Form Element 【发布时间】:2021-12-27 21:57:39 【问题描述】:

我正在尝试在 knockout.js 中对表单元素进行数据绑定。但是我不希望元素在表单中是可编辑的,甚至不希望将元素显示给用户。

我能够正确地将值绑定到输入元素。但如果我可以从 html 或标签文本或跨度中提取值,我会更喜欢。所以下面的工作,但我无法改变它,所以它不是用户可以改变的输入。

<input id="txtProvider" name="txtProvider" type="text" data-bind="value: $root.session().Resource().provider" />

我尝试只使用带有占位符的隐藏元素,但这不起作用。

<input id="txtProvider" name="txtProvider" type="hidden" placeholder="WebEx" data-bind="value: $root.session().Resource().provider" />

有什么建议吗?

提前感谢您的帮助。

【问题讨论】:

placeholder 属性不会对隐藏的输入执行任何操作。它只是输入字段上的一个可视占位符,它不像“默认值”或类似的东西。听起来您生成了一些服务器端,并希望在某处放置一个值以便以后在淘汰赛中使用,对吗? @Karl-JohanSjögren 正确,我想渲染一些 HTML,比如一个值作为配置的跨度。然后,当用户提交表单时,我想将该数据与表单一起发送。但我错过了如何从不是用户输入的表单元素中提取数据。 【参考方案1】:

你正在做的工作,或者应该工作,很好:

<form>
  <input type="hidden" data-bind="value: myHiddenVal" />
</form>

function ViewModel() 
  self.myHiddenVal = ko.observable('Foo');


ko.applyBindings(new ViewModel());

这将产生:

<input type="hidden" data-bind="value: myHiddenVal" value="Foo">

示例:https://jsfiddle.net/thebluenile/myves32x/

虽然我不得不说,我当然不知道您的确切用例,但“从 HTML 元素中提取值”与 Knockout 或任何其他数据绑定框架的工作方式有点对立。如果用户不必编辑该字段,您可以将其完全排除在 UI 之外。我能想到的隐藏元素的唯一有效用例是,如果您将表单提交给服务器端脚本进行处理,而不是通过 AJAX 发送其内容。

【讨论】:

以上是关于Knockout JS 如何将数据绑定到静态表单元素的主要内容,如果未能解决你的问题,请参考以下文章

在 Knockout.js 中异步应用绑定

访问 Javascript Html 模板并使用 Knockout.js 绑定数据

Knockout.js 将参数绑定到 Data-Target 返回对象而不是文本(手风琴)

Knockout JS 将元素的属性绑定到另一个元素

单选按钮的 knockout.js 布尔数据绑定问题

如何有条件地绑定到 knockout.js 中的“valueUpdate”?