淘汰赛期间没有工作

时间:2016-03-03 23:12:52

标签: knockout.js foreach

好吧,我试过阅读文档;我试过改变我的设置;我已经尝试了我能想象到的一切,但我无法让我的foreach循环工作。

var Entry = function(item) {
    this.id = item.id;
    this.locations = item.locations;
    this.read = ko.observableArray(item.read);
    this.subentries = ko.observableArray(item.subentries);
    this.creator = item.creator;
    this.created = item.created;
    this.entry = item.entry;
}

function managerLogModel() {

    var self = this;

    // declare the different components


    // log entries
    this.entries = ko.observableArray();

    this.loadData = function(data) {
        for(i=0;i<data.length;++i) {
            self.entries().push(new Entry(data[i]));
        }
    }

 ...more functions that I don't believe are affecting, since I'm getting
    the console to log the desired data: [Entry, Entry, Entry,...]

}

一切似乎都适用于后端。在this.loadData之后,我做了一个console.log(self.entries()),我得到了一个Entry对象列表。

但是,在模板中,我无法正常工作。我试过了:

<div data-bind:"foreach:$data">test</div>
<div data-bind:"foreach:$data.entries">test</div>
<div data-bind="foreach:$data">test</div>
<div data-bind="foreach:$data.entries">test</div>

有趣的是,在我实现Entry模型之前,这是完美的。我可以将JSON加载到self.entries(数据)中,模板可以正确地呈现数据(尽管我必须使用data-bind:not data-bind =)

有人能指出我正确的方向吗?

编辑:如下所示的奇怪语法;仅适用于data-bind:foreach:

<!-- ko foreach: paginated -->

   <div class="entry" data-bind:"foreach:entries">

        <div class="entry-header">

....

1 个答案:

答案 0 :(得分:1)

data-bind后面跟着=$data用于 in a foreach,因此您不希望这样。 如果push指向observableArray的内容,则Knockout不会注意到这些更改。你需要push到observableArray本身。

所以你想要

<div data-bind="foreach: entries">test</div>

self.entries.push(new Entry(data[i]));