【发布时间】:2014-04-02 03:14:51
【问题描述】:
考虑一下来自the very first Knockout tutorial的示例代码:
<p>First name: <strong data-bind="text: firstName">todo</strong></p>
<p>Last name: <strong data-bind="text: lastName">todo</strong></p>
<script>
function AppViewModel() {
this.firstName = "Bert";
this.lastName = "Bertington";
}
ko.applyBindings(new AppViewModel());
</script>
Knockout 如何知道 HTML 中的 text: firstName 指的是 AppViewModel 的 firstName 属性,而不是某些 other 模型的 firstName 属性?它是否只是推断这一点,基于以下事实:(a) HTML 要求 Knockout 将其绑定到名为 firstName 的属性,并且 (b) AppViewModel 恰好有一个名为 @ 的属性987654330@?
我希望我的 data-bind 属性必须指定与视图关联的 model,就像 well 作为属性,以便 Knockout 知道 要在哪个模型中找到该属性。
毕竟,我完全有可能拥有另一个具有相同属性名称的模型:
<script>
function AppViewModel() {
this.firstName = "Bert";
this.lastName = "Bertington";
}
function OtherModel() {
this.firstName = "Chet";
this.lastName = "Chesterson";
}
ko.applyBindings(new AppViewModel());
ko.applyBindings(new OtherModel());
</script>
(我实际上尝试了上面的代码,并且似乎Knockout首先绑定了传递给applyBindings()的任何模型,而忽略了第二个。)
我只是在学习 Knockout,我敢肯定这是非常初级的。但是我已经完成了前四个教程,并做了一些边读,但我没有看到任何解决这个基本问题的方法。
【问题讨论】:
-
我想你回答了你自己的问题。我相信您只需要调用 .applyBindings 一次。您传递的视图模型是绑定的。 data-bind 属性告诉 KO 哪个属性。
-
您还可以将绑定应用到 DOM 中的多个节点...应用绑定确实需要第二个参数,即您要绑定到的元素...因此您可以使两个绑定都工作如果你有 2 个单独的元素,每个元素都有唯一的 ID...getElementById('xxx')
标签: javascript mvvm knockout.js