Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.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
Knockout.js 如何创建一个可观察的array“;“推前”;订阅_Knockout.js - Fatal编程技术网

Knockout.js 如何创建一个可观察的array“;“推前”;订阅

Knockout.js 如何创建一个可观察的array“;“推前”;订阅,knockout.js,Knockout.js,我正试图找出在observearray中出现重复条目的原因。在将项目添加到可观察数组之前,是否有一种订阅查看的方法?使用订阅添加项目后,我可以看到如下内容: var myArr = ko.observablearray(); myArr.subscribe(function (changes) { changes.forEach(function (change) { var item = change.value; var itemStatus = ch

我正试图找出在
observearray
中出现重复条目的原因。在将项目添加到可观察数组之前,是否有一种订阅查看的方法?使用订阅添加项目后,我可以看到如下内容:

var myArr = ko.observablearray();
myArr.subscribe(function (changes) {
    changes.forEach(function (change) {
        var item = change.value;
        var itemStatus = change.status;
        if (itemStatus === "added") {

        } else if (itemStatus === "deleted") {

        }
    });
}, null, "arrayChange");

TL;DR:您可以使用签名
myArray.subscribe(func,null,“beforeChange”)


observearray
只是一个具有额外属性的
observed
,因此所有
subscribe
功能都正常工作。发件人:

subscribe
函数接受三个参数:
callback
是在通知发生时调用的函数,
target
(可选)在回调函数中定义
this
的值,
event
(可选;默认值为“change”)要接收通知的事件的名称

如果您希望在即将更改的可观察对象的值之前得到通知,您可以订阅
beforeChange
事件

下面是一个例子:

var ViewModel=function(){
var self=这个,i=1;
self.items=ko.observearray([i++,i++,i++]);
self.addItem=function(){self.items.push(i++);};
self.items.subscribe(函数(oldValue){
警报(“更改自:“+ko.toJSON(oldValue));
},空,“变更前”);
self.items.subscribe(函数(newValue){
警报(“更改为此新值:“+ko.toJSON(newValue));
});
};
应用绑定(新的ViewModel())

添加项

你不能找到所有修改数组的地方并调试它们吗?这正是我需要的。使用此代码,然后能够在第一次运行时看到我的问题。新项目被推到了一个我忽略了的替代原型中。