【问题标题】:Binding an observableArray of observables绑定 observableArray 的 observables
【发布时间】:2013-05-07 12:12:35
【问题描述】:

我有一个 observableArray,里面装满了我想绑定到输入字段的 observable,like in this fiddle:

<ul data-bind="foreach: elements">
    <li>
        <input type="text" data-bind="value: $data"/>
    </li>
</ul>

但是,数组中的 observables 正在被解包,所以此时 observable 的值绑定到输入的值,而不是 observable 本身。

是否可以绑定可观察对象本身,而不是绑定值?

In a different question, RP Niemeyer 建议将 observable 包装在一个对象中。这是我目前的解决方案,但我不喜欢多余地包装 observable,而是直接绑定它。

【问题讨论】:

  • 数据到达value 输入时的绑定已经被解包(只是可观察的值),因此写入无法将其恢复为可观察的。您仍然需要将其包装在一个对象中才能使其当前正常工作。
  • 这就是我害怕的。你说这需要当前完成,这是否表明这是你正在做的事情?
  • 我们有一个问题和一些支持可观察视图模型的工作:github.com/SteveSanderson/knockout/issues/485。但是,在 foreach 循环内,如果数据已经被解包,则无法返回可观察对象。我可以看到可能会添加一个选项以在某些时候不打开包装。
  • 如果你确实需要这个(不能重新映射你的结构)并且不介意语法,那么我认为 Sujesh Arukil 建议的答案没有问题。跨度>
  • @RPNiemeyer 这实际上比我想象的更容易实现。我创建了一个pull request

标签: knockout.js


【解决方案1】:

在您的情况下没有间接的方法。但是,如果您愿意,您可以使用 $parent.elements()[$index()] 来执行此操作。

<input type="text" data-bind="value: $parent.elements()[$index()], click: function() { console.log($data); }"/>

这是您更新的小提琴。 http://jsfiddle.net/sujesharukil/qRXua/1/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-28
    • 2013-06-30
    • 1970-01-01
    • 1970-01-01
    • 2017-09-26
    • 1970-01-01
    • 2014-11-17
    • 1970-01-01
    相关资源
    最近更新 更多