ko中是否有任何选项可以同时推送多个元素?
我有两个元素需要插入一个名为的可观察数组中StatesList,我无法继续进行.我怎样才能添加它们.
见下文:
var model1 = jQuery.parseJSON(ko.toJSON(argsToPost));
var model = jQuery.parseJSON(ko.toJSON(self.StateModel));
Run Code Online (Sandbox Code Playgroud)
我需要添加两个 ObservableArray
self.StatesList.push(model);
self.StatesList.push(model1);
Run Code Online (Sandbox Code Playgroud)
这是插入不同的记录,我想同时插入两个对象
Raj*_*dev 46
我们确实有ko.utils.arrayPushAll(array, valuesToPush)一个可以使用的实用功能.但它不能直接从observableArrays中获得.
如果你把你的pushAll to observableArrays,你会想(在这种情况下,()),底层阵列上运行,然后调用valueHasMutated()的observableArray结尾.这将确保observableArray只有最终结果而不是每次推送通知一次订阅者.
在KO核心中,它也需要valueWillMutate()事先打电话.
关键是我不建议使用您发布的代码,因为它会在每次推送时通知,如果您推送许多项目,这会对性能产生影响.
在核心,我们可能会做类似的事情:
ko.observableArray.fn.pushAll = function(valuesToPush) {
var underlyingArray = this();
this.valueWillMutate();
ko.utils.arrayPushAll(underlyingArray, valuesToPush);
this.valueHasMutated();
return this; //optional
};
Run Code Online (Sandbox Code Playgroud)
在John Papa和之间发生了同样的讨论RP Niemeyer.链接可以在这里找到.因此,仅在此处发布了有用的提示作为答案.
phi*_*ooo 28
尝试
ko.utils.arrayPushAll(self.StatesList, [model, model1]);
Run Code Online (Sandbox Code Playgroud)
chi*_*oro 12
pushAll已经在github上讨论了一个函数,参见例如此问题或此拉取请求.据我所知,它尚未成为主要代码.
但是你可以很容易地实现像这样的推送:
var items = ko.observableArray();
items.push.apply(items, [1, 2, 3, 4]);
Run Code Online (Sandbox Code Playgroud)
由stalniy在第二篇参考文献中评论.这样做的缺点是淘汰赛会在推送每一件物品后通知订户.
或者,
function concat(the_list, items_to_concat) {
the_list.splice.apply(the_list, [the_list().length, 0].concat(items_to_concat));
}
Run Code Online (Sandbox Code Playgroud)
因此,正如brianmhunt在同一个线程上所建议的那样利用了它observableArray的splice实现.
顺便说一句:我承认我不知道这个,我只是用谷歌搜索"推许多淘汰赛"
| 归档时间: |
|
| 查看次数: |
33647 次 |
| 最近记录: |