Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/415.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 实现Knockout.js破坏性foreach循环_Javascript_Arrays_Knockout.js - Fatal编程技术网

Javascript 实现Knockout.js破坏性foreach循环

Javascript 实现Knockout.js破坏性foreach循环,javascript,arrays,knockout.js,Javascript,Arrays,Knockout.js,以下是包含数据绑定元素的html: div data-bind="foreach: clientRequests" id="test2"> <div class="list-group" > <a href="#" class="list-group-item active"><b data-bind="text: client"></b></a>

以下是包含数据绑定元素的html:

div data-bind="foreach: clientRequests" id="test2">
           <div class="list-group" >
               <a href="#" class="list-group-item active"><b data-bind="text: client"></b></a>
               <a href="#" class="list-group-item"><b>Priority: </b><b data-bind="text: client_priority"></b></a> 
               <a href="#" class="list-group-item"><b>Title: </b><b data-bind="text: title"></b></a>
               <a href="#" class="list-group-item"><b>Description: </b><b data-bind="text: description"></b></a> 
               <a href="#" class="list-group-item"><b>Product Area: </b><b data-bind="text: product_area"></b></a>
               <a href="#" class="list-group-item"><b>Target Date: </b><b data-bind="text: target_date"></b></a>
               <a href="#" class="list-group-item"><b>Ticket URL: </b><b data-bind="text: ticket_url"></b></a>
           </div>
        </div>
对于不同的AJAX调用,会返回不同的RequestArray。例如,在初始页面加载之后,进行一个AJAX调用,该调用接收requestArray的一个实例,该实例可能包含10个项。foreach循环的行为似乎与预期的一样,数组中的所有10项都填充在页面上。然后,进行第二个AJAX调用,但这次数组可能只有5个项。每个项目重复两次,页面上总共出现10个项目

问题似乎是,即使之前调用了
ko.cleanNode(document.getElementById('test2'))

ko.applyBindings({
                clientRequests: requestsArray
            }, document.getElementById('test2'))
对于每个新数组,每个
foreach
迭代创建的HTML元素的数量随着每个新数组的增加而不断增加。使用Vue.js,每次向数据绑定和for循环传递一个新数组时,它本质上是破坏性的,不会保留数组上一次迭代中的任何内容


显然,在这种情况下使用
ko.cleanNode
在这里不起作用,我知道有一个示例可以执行我认为正确的过程,但每次只能通过按钮和
self.array.remove(此)
,执行一个html元素,我不太清楚如何调整它,以便彻底清除从数组
foreach
迭代创建的所有html元素

我不明白为什么必须手动重新应用绑定。具有可观察阵列的视图模型的整体观点是,knockout为您处理数据更新。。。通常,当您使用
cleanNode
时,有一种更简单的方法来做事情

你试过这样的东西吗

//应用绑定一次,viewmodel实例不会更改
//在请求之间
应用绑定(新的ViewModel());
函数ViewModel(){
//因为数组是可观察的,所以将
//监视更改并更新UI
this.requests=ko.observearray([]);
//视图模型具有请求方法
//.done回调将结果写入可观察对象
//请求数组
this.doRequest=函数(){
mockupAjaxGetter().done(this.requests);
}.约束(本);
//提出初步要求
这是doRequest();
};
//模拟代码,只是在超时时生成一些随机数
函数mockupAjaxGetter(){
var randomResults=[];
对于(变量i=0;i


新请求
为什么不在每次调用Ajax时清空模型中的数组?1@Matt.kaaj我正在这样做,将在帖子中更新我的代码。这对Knockout.js绑定的情况没有帮助。更新数组本身不是问题,而是通过每个新数组的每次foreach迭代创建的html元素的累积。
ko.applyBindings({
                clientRequests: requestsArray
            }, document.getElementById('test2'))