Javascript 剔除集元素数据

Javascript 剔除集元素数据,javascript,knockout.js,Javascript,Knockout.js,更新 我意识到这不是“击倒方式”,而是 我想直接更新绑定元素上的数据 要获取元素的数据,我将使用 var data = ko.dataFor(this); 我想做一些像 ko.setData(element, key, value) 设置元素内部数据,而不触发任何绑定 我目前正在做以下工作 var data = {new_data:"yes please"}; ko.cleanNode(element); ko.applyBindings(data

更新 我意识到这不是“击倒方式”,而是


我想直接更新绑定元素上的数据

要获取元素的数据,我将使用

var data = ko.dataFor(this);
我想做一些像

ko.setData(element, key, value)
设置元素内部数据,而不触发任何绑定

我目前正在做以下工作

       var data = {new_data:"yes please"};
       ko.cleanNode(element);
       ko.applyBindings(data, element);
$data: Object
$index: d()
$parent: Object
$parentContext: a.N
$parents: Array[1]
$rawData: Object
$root: Object
ko: Object
我意识到这不是最好的做法,但我想找到一种干净的、易于管理的方法

查看源代码后。有可能找到数据存储的setter吗

设置:功能(节点、键、值)
第24行

许多评论都指出-不建议使用这种方法

我用手指搔痒

ko.contextFor(element);
这使我能够访问以下内容

       var data = {new_data:"yes please"};
       ko.cleanNode(element);
       ko.applyBindings(data, element);
$data: Object
$index: d()
$parent: Object
$parentContext: a.N
$parents: Array[1]
$rawData: Object
$root: Object
ko: Object
然后我更改了$data对象中的相关属性。

ko.contextFor(element)。$data
ko.dataFor(element)
基本相同


因此,您只需执行ko.dataFor(element).relevantProperty('newValue')。

“我想直接更新绑定元素上的数据。”-我想您需要先解释一下。这听起来有点像你有一个基本的概念错了。在我看来这是一个错误。你到底想达到什么目的?像这样对抗淘汰赛并不是“不是最佳实践”,它是一种造成伤害的方法,很可能会导致丑陋的bug,这是一种调试的痛苦,并且可能通过从不同的方向进行很容易避免。嗯,我觉得当对底层数组的一个项属性进行一个小的更改时,foreach绑定做了太多的工作。另外,我不想对每个属性使用可观察的。我有一些机制可以告诉我发生了什么变化,发生了什么变化。反映出我想在绑定(li)元素中对html进行一些巧妙的更新,如果我不触发ObservalArray中的更改,那么绑定的数据就会过时。称之为个人优化策略。简而言之,我知道基础模型已经改变了,但我不想重新构建整个列表。然后解释一下你在做什么。不管怎么说,当你构建一个淘汰版应用程序时,使用可观测数据并不是一种反模式。我刚才已经解释过了。我们不能再破坏东西了吗?