1

添加新行后,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>

LIST PRODUCED 我使用这些字段并添加有效的“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

添加行时如何停止可观察的“在字段上”?

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

我想我在 self.add 之后遗漏了一些东西,要么释放该字段的 observable,要么创建一个 = new 的东西,所以 newName 是一个单独的 Array 对象。(完全不确定..)

4

1 回答 1

1

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

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

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

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

self.add = function () {
    self.clients.push({
          Name : self.newName(),
    })
}
于 2013-01-25T20:13:44.523 回答