【问题标题】:KnockoutJS Fields added to array updating previous rows将 KnockoutJS 字段添加到更新前行的数组中
【发布时间】:2013-01-26 04:13:44
【问题描述】:

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

然后我添加另一个名称“酒吧” ..现在我有(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 'on the fields'?

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

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

【问题讨论】:

    标签: arrays knockout.js


    【解决方案1】:

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

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

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

    self.newName = ko.observable("");
    
    self.add = function () {
        self.clients.push({
              Name : self.newName(),
        })
    }
    

    【讨论】:

    • 该行现在是正确的。但是,当我在新添加的行上调用另一个函数时,我得到:** 对象 # 的属性“名称”不是函数 **
    • 如果你需要 Name 作为 observable 你需要写:self.clients.push({ Name : ko.observable(self.newName()), })
    • 我刚刚注意到:使用按钮添加新行后。我清除字段(使用简单的 jquery)。当字段为空时,我单击按钮(没有值),然后 KO 将前一行中的相同数据添加为新的数组项。在我们添加了一个新的数组项之后,我们可以告诉 KO 忘记/清除它的“记忆”吗?
    • 如果您使用 jQuery 敲除清除字段,则无法跟踪该字段已更改。所以它将以前的值存储在像newName 这样的可观察对象中。为了解决这个问题,不要使用 jQuery 来清除字段,而是将 observable 设置为空:self.add = function () { self.clients.push({ Name : ko.observable(self.newName()) }) self.newName(""); } Demo:jsfiddle.net/nemesv/UXbFT
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-03
    • 2014-05-18
    • 2022-10-25
    • 1970-01-01
    • 1970-01-01
    • 2015-07-02
    • 2021-12-07
    相关资源
    最近更新 更多