ObservableArray Knockout不更新视图

时间:2016-02-18 14:39:10

标签: knockout.js

我正在使用knockoutJs,我遇到了observableArray的问题。

这是代码:

var productOid = this.product._oid;
for (var oid in this.basket.dataProvider.persistentBasketItems) {
    var item = this.basket.dataProvider.persistentBasketItems[oid];
    var reference = this.basket.dataProvider.references[item.referenceOid];
    if (!reference) continue;
    if (reference.productOid == productOid) {
        for (var i = 0; i < item.productComplements.length; i++) {
            complements.push(item.productComplements[i]);
        }
        break;
    }
}
this.complements = ko.observableArray(complements);
var grid = this.grid();
if (grid)
    grid.updateComplements();

这是html代码:

<span data-bind="text: $parent.complements[openRank]"></span>

openRank属性是在视图上绑定的视图模型上定义的。

正如您在下面的screenShot中看到的那样,数据存在于数组中。

ScreenShot

任何人都可以提供帮助吗?

致以最诚挚的问候,

1 个答案:

答案 0 :(得分:2)

如果openRankobservable,请尝试:

<span data-bind="text: $parent.complements()[openRank()]"></span>

如果没有,请将其更改为observable,因为淘汰赛需要知道发生了更改以更新视图。

请参阅代码段:

&#13;
&#13;
var viewModel = function(){
  this.pos = ko.observable(0);
    this.list = ko.observableArray(["item 1","item 2"]);
}

ko.applyBindings(new viewModel())
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>

<input type="number" data-bind="value: pos">
<span data-bind="text: list()[pos()]"></span>
&#13;
&#13;
&#13;