Obvservable数组中的Knockout Observable未更新

时间:2015-10-05 08:49:22

标签: javascript html arrays knockout.js

您好我在ObservableArray中使用knockout observables,在observableArray中推送的对象就像是跟随,我正在制作它的价值'属性可观察:

{
   'name': "aka[]",
   'value': (value && value != "" ? ko.observable(value) : ko.observable(""))
}

我在HTML中使用foreach将输入元素绘制到observableArray中找到的对象数量(下面的akaList)

<p data-bind="foreach: $root.akaList()">
    <input title="Also Known As (AKA)" data-bind="attr:{ 'name' : $data.name, 'value': $data.value}" type="text"
                   required="required"/>
</p>

当我输入input元素时,它不会更新observableArray中的对象值。我发现foreach展开了可观察数组,这就是为什么我无法看到数组中的更新。所以我尝试用$parent.akaList()[$index()].value来做,我的HTML变成这样:

<p data-bind="foreach: $root.akaList()">
    <input title="Also Known As (AKA)" data-bind="attr:{ 'name' : $data.name, 'value': $parent.akaList()[$index()].value}" type="text"
                   required="required"/>
</p>

但它仍然无法正常工作你能告诉我出了什么问题吗?由于我项目中的一些限制,我无法使用映射插件。我试图找到其他方式。我用错误的语法写东西吗?以下是小提琴:

JS Fiddle

1 个答案:

答案 0 :(得分:1)

您可以使用value绑定作为

<input title="Also Known As (AKA)" data-bind="value: $data.value, attr:{ 'name' : $data.name}" type="text" required="required" />

如果你可以使用knockout 3.2.0,那么使用textInput绑定。

<input title="Also Known As (AKA)" data-bind="textInput: $data.value, attr:{ 'name' : $data.name}" type="text" required="required" />

JsFiddle:https://jsfiddle.net/29Lvhrx4/2/