将两个WinJS.Binding.List连接为一个
Concat two WinJS.Binding.List into one
我正在尝试将2个WinJS.Binding.List
合并为一个。我在MSDN上看到了.concat
方法,但它似乎不起作用。有人能告诉我怎么做吗?
var a = new WinJS.Binding.List([1,2])
var b = new WinJS.Binding.List([3,4])
期望输出:一个WinJS.Binding.List,其中包含数字1,2,3,4。
我尝试了a.concat(b)
,但它返回一个3元素数组而不是WinJS.Binding.List
。这是控制台的日志。
var a = new WinJS.Binding.List([1,2])
var b = new WinJS.Binding.List([3,4])
a.concat(b)
==> [object Array][...]
知道为什么和如何正确地做吗?
注:我知道我可以遍历b
中的每个项目并将其推入a
,但是否存在更有效的方法?我也不想在将它们转换为WinJS.Binding.List
之前连接数组,因为我正在从2个不同的数据源进行2次异步调用。上面的代码只是一个简化的示例。
您可以从列表中获取两个数组(使用slice),将它们连接起来,然后创建一个新列表。
var a = new WinJS.Binding.List([1, 2]);
var b = new WinJS.Binding.List([3, 4]);
var ab = new WinJS.Binding.List(a.slice(0).concat(b.slice(0)));
也可以使用list concat方法(与js的本地concat相反)使其更短:
var a = new WinJS.Binding.List([1, 2]);
var b = new WinJS.Binding.List([3, 4]);
var ab = new WinJS.Binding.List(a.concat(b.slice(0)));
从你的描述中,我假设你的数据是从不同的来源返回的,并且是(a)已经在单独的WinJS.Binding.List实例中,使得投影不可行或(b)语义上不同,足以保证在单独的List实例中存储。
在这种情况下,我的方法可能是使用事件侦听器沿以下行同步已连接列表:[list1, list2].forEach (list) ->
list.oniteminserted = (event) -> joinedList.push(event.detail.value)
list.onitemremoved = (event) -> joinedList.splice(joinedList.indexOf(event.detail.value),1)
(要用addEventListener
和相应的removeEventListener
替换,以增加复杂性;))此方法的缺点是您几乎无法控制最终列表中项的顺序,这将保证另一个排序谓词,即在该模型中进一步的开销。
最后,很可能在两个列表中都放置一个好的旧.forEach (item) -> joinedList.push(item)
是解决这个问题的最直接和最合适的方法。
# put all items in the "big" list
item1.source = 'list1'
joinedList.push(item1)
item2.source = 'list2'
joinedList.push(item2)
# create separate lists using projection
list1 = joinedList.createFiltered (i) -> i.source is 'list1'
list2 = joinedList.createFiltered (i) -> i.source is 'list2'
相关文章:
- 是否可以将一个函数输入连接到另一个函数调用的文本
- 如何将所有JS文件连接到一个文件夹中
- Javascript/web-dev:为什么你需要一个服务器来连接硬件
- 在Javascript中连接一个动态变量名
- Webrtc和socket.io:createanswer()总是有一个错误.为什么?我的代码连接了两个对等体,但其中只
- 具有一个类的序列图,与运算符没有直接连接
- 从另一个选择框并使用数据库连接填充选择框
- 不能连接一个 ajax 中的 javascript 变量,而另一个 ajax 内部的 javascript 变量
- 使用parse.com,我如何连接一个查询以返回两个独立查询的结果.equalTo
- Javascript连接一个函数,类似于如何添加文本
- 连接一个二维数组
- 连接一个空字符串
- ExtJS:连接一个存储到一个组合框
- 连接一个字符串和一个int值,同时给一个
- 映射数组中的属性,并在JavaScriptes6中连接一个字符串
- 在 JavaScript 中连接一个函数
- Emberjs -连接一个{{input}}过滤器栏与我的对象列表.当我输入时,列表过滤
- 如何连接一个express JS应用到github API
- 尝试连接一个jQuery .click()事件.但它是被解雇(而不是仅仅布线)
- 通过两个服务连接一个承诺