KnockoutJS Fields添加到更新前一行的数组中

时间:2013-01-25 20:09:37

标签: arrays knockout.js

在我添加新行后,KO'observable'没有发布。

HTML

<input type="text" data-bind="value: newName" />
<button data-bind="click: add">Create</button>

JS

self.newName = ko.observable("");

self.add = function () {
    self.clients.push({
          Name : self.newName,
    })
}

LIST-开始

<ul>
    <li>John</li>
    <li>Joe</li>
<ul>

列出生产 我使用字段并添加“Foo”工作

 <ul>
        <li>John</li>
        <li>Joe</li>
        <li>Foo</li>
    <ul>

然后我添加另一个名字'Bar' ..现在我有(2)'Bar','Foo'被替换

<ul>
    <li>John</li>
    <li>Joe</li>
    <li>Bar</li>
    <li>Bar</li>
<ul>

然后我添加另一个名字'JarJar',现在我有(3)'JarJar','Bar'被替换

<ul>
    <li>John</li>
    <li>Joe</li>
    <li>JarJar</li>
    <li>JarJar</li>
    <li>JarJar</li>
<ul>

然而,当我删除每一行时,它确实删除了选择行,而不是所有3行

添加行时,如何停止字段上的observable?

我仍然需要将新添加的行添加到KO数组中,以便稍后可以访问它。

我认为我在self.add之后缺少一些东西要么释放字段的observable,要么创建一个= new的东西,因此newName是一个单独的Array对象。 (完全不确定..)

1 个答案:

答案 0 :(得分:1)

由于缺少(),您传递Name ko.observable函数本身,而不是它所拥有的值。

这就是你复制的原因,因为clients数组中所有创建的对象都共享对同一函数的引用。

以下是应该正常工作的固定代码:

self.newName = ko.observable("");

self.add = function () {
    self.clients.push({
          Name : self.newName(),
    })
}