淘汰 observableArray 性能

发布于 2024-12-13 04:57:26 字数 152 浏览 0 评论 0原文

如何一次性将所有值添加到observableArray中?在我的情况下,在循环中添加值的速度非常慢。这是 jsfiddle 示例。 jsfiddle

How to add all values to observableArray in one time? Adding values in loop works very slow in my case. Here is jsfiddle example.
jsfiddle

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

蓝梦月影 2024-12-20 04:57:26
var myArray = ko.observableArray([]);
var valuesToInsert = [1,2,3];
myArray.push.apply(myArray, valuesToInsert);

就是这样

var myArray = ko.observableArray([]);
var valuesToInsert = [1,2,3];
myArray.push.apply(myArray, valuesToInsert);

that's it

夏花。依旧 2024-12-20 04:57:26

由于您要清除整个可观察数组,因此实现此目的的一种方法是:

var viewModel = {
    name: "base",   
    addingValue:new ko.observable(),
    someArr: new ko.observableArray(["123","432","sdafasd","xrere"]),
    add: function()
    {
        this.someArr.push(this.addingValue());
    },
    updateSomeArr:function()
    {
        var temp = [];

        for(var i=0;i<5;i++)
        {
            temp.push("555565");
        }

        this.someArr(temp);
    }
}

Since you're clearing out the entire observable array, one way you can accomplish this is:

var viewModel = {
    name: "base",   
    addingValue:new ko.observable(),
    someArr: new ko.observableArray(["123","432","sdafasd","xrere"]),
    add: function()
    {
        this.someArr.push(this.addingValue());
    },
    updateSomeArr:function()
    {
        var temp = [];

        for(var i=0;i<5;i++)
        {
            temp.push("555565");
        }

        this.someArr(temp);
    }
}
一枫情书 2024-12-20 04:57:26

已经有一个选定的答案,但我认为以下内容会有所帮助。您可以通过执行可观察数组来禁用观察行为,以获取底层数组实现:

var underlyingArray = viewModel.someArr();

然后您可以将项目添加到 underlyingArray 中,而无需触发 someArr 事件。添加完项目后,调用:

viewModel.someArr.valueHasMutated();

这将导致事件触发,通知所有依赖于 viewModel.someArr() 的可观察对象。

There is already a selected answer, but I thought that the following would help. You can disable the observing behavior by executing your observable array to get the underlying array implementation:

var underlyingArray = viewModel.someArr();

You can then add items to underlyingArray without firing off someArr events. Once you're done adding items, call:

viewModel.someArr.valueHasMutated();

This will cause the event to fire notifying all observables dependent on viewModel.someArr().

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文